一个法官用老法律判案,必然荒唐。
C语言教程中,存在许多类似的问题,因为它们参考的还是ANSI C(通常叫C89)。
现在有C99和C11,怎么办?
例子:变量声明不再必须放在前面;
例子:定义数组[元素个数]必须是可转换为整型的、大于0的编译时常量的表达式。
void arrayBasic(void){ int arr [ 5 ]={1,2,3,4,5}; //定义并初始化 int sum=0; for(int i=0;i<sizeof(arr)/ sizeof(int);i++){ sum +=arr[i]; printf("arr[%d]=%d ",i,arr[i]); } printf("\nsum of arr= %d\n",sum); //定义时[元素个数]必须是可转换为整型的、大于0的编译时常量。 int a2[1+2*3];//常量表达式 //a2 = {1,2,3}; //Invalid expression int a3[(int)4.6]; int a4[Size];//符号常量 const int size=10; int a5[size];//命名常量 int n =8; int a6[n];//C99标准,变长数组 //int b1[0];//an invalid array size //int b2[-2]; int b3[2.3];//不知道那个标准 int b4[n+1]; //初始化 int arr3[5]={[2]=3}; //int arr4[]={1,2,3,4,5}; for(int i=0;i<5;i++){ printf("arr[%d]=%d ",i,arr3[i]); } printf("\n"); }