问题1:以对二维数组的定义中正确的是()。
A.int a[4][]={1,2,3,4,5,6};
B.Int a[][3];
C.Int a[][3]={1,2,3,4,5,6}
D.Int a[][] = {{1,2,3},{4,5,6}}
定义二维数组时,若按一维格式初始化,则第一维的长度可以省略,此时,系统可根据初始化列表中值的个数及第二维的长度计算出省略的第一维长度,但无论如何,第二维的长度不能省略。没有初始化时,每一维的长度都不能省略.
问题2:int i=8,j; j=(++i)+(++i)+(++i);问:j的值为什么是31?
int i=8,j;
j=(++i)+(++i)+(++i);
printf("i=%d,j=%d\n",i,j);
运行结果是:i=11,j=31
(++i)+(++i)+(++i)的运算过程
1、自增运算是从右向左结合,加法运算从左到右进行运算
2、先计算第左边第一个(++i),则i值变为9
3、然后计算第二个(++i),则i 值变为10
4、 加法运算从左到右进行运算 ,因此先计算第一个(++i)与第二个(++i)的和,但是执行第3步后i 值变为10了,因此执行加法运算时是两个10相加,得20
5、计算第三个(++i),则i 值变为11
6、最后将步骤4中得到的20与步骤5中得到的i 值11相加,得到31,赋给j变量
![45a7ce6c86c42dbbb23e5e12ceedfd97.png](https://i-blog.csdnimg.cn/blog_migrate/981eb251cbe26cf2398f28e5aecb2581.jpeg)