|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
int main()
{
int a[3][4] = {a[1][1]=2,a[2][2]=3,a[0][0]=1};
int i,j;
for (i = 0; i < 3;i++)
{
for (j = 0; j < 4; j++)
{
printf("%-d ", a[i][j]);
}
printf("\n");
}
return 0;
}
在这个程序中如果按上面程序写的输出是:
1 3 1 0
0 2 0 0
0 0 3 0
把int a[3][4] 改为int a[3][4] = {[1][1]=2,[2][2]=3,[0][0]=1};的话:
输出是:
1 0 0 0
0 2 0 0
0 0 3 0
(这个是小甲鱼上课课件中的,但是我自己尝试了第一种情况,请问为什么会这样呢?第一种情况为什么 a[0][1] a[0][2]都会有输出呢?)
本帖最后由 superbe 于 2019-12-29 14:05 编辑
第一种写法相当于:
对表达式a[1][1]=2求值,把结果2赋给数组第一个元素a[0][0]
对表达式a[2][2]=3求值,把结果3赋给数组第二个元素a[0][1]
对表达式a[0][0]=1求值,把结果1赋给数组第三个元素a[0][2]
在对表达式a[0][0]=1求值时给a[0[0]]赋值1,覆盖了前面给它赋的2,所以a[0][0]的值最终是1。
指定初始化器应该是第二种写法。
|
|