快速入门那套视频里讲的是不允许这样定义, 但是零基础那套视频里讲的是可以这么定义的. 可能零基础那套视频比较新, 在Xcode中实验一下, 是允许这么定义的.
二者使用上的区别是,
使用常量或者常量表达式(包括宏定义)指定元素个数时, 在定义数组的同时可以对数组进行初始化.
使用变量或变量表达式指定元素个数的数组, 不可以在定义的同时进行初始化, 必须定义后再赋值.
比如,
// 使用常量或常量表达式, 可以在定义同时初始化
int a[3*3] = {1}; // 初始化后, 未被赋值的元素默认赋值为0
// 使用宏定义, 可以定义同时初始化
#define N 5
int a[N] = {1, 2, 3, 4, 5};
// 使用变量或变量表达式指定元素个数时, 不可以在定义时初始化数组
int n = 5;
// int a[n] = {1, 2, 3, 4, 5}; 错误!
// 但是可以先定义数组, 再对数组元素进行赋值
int a[n]; // 可以这样定义
a[0] = 1; a[1] = 2; // 可以赋值. 注意: 未被赋值的元素是任意值 (不一定是0) |