注意数组里面的花括号{ },小括号 ( ) 和逗号,
逗号表达式的值是:先计算前面的表达式,后计算后面的表达式。
表达式最终的值是最后一个表达式的值。
举例1:
int main()
{
int a[3][2]={{0,1},(2,3),(4,5)};
int *p;
p=a[1];
printf("%d\n",p[0]);//3
printf("%d\n",p[1]);//5
printf("%d\n",a[0][0]);//0
printf("%d\n",a[0][1]);//1
printf("%d\n",a[1][0]);//3
printf("%d\n",a[1][1]);//5
system("pause");
return 0;
}
定义了一个二维数组,3行2列,但是注意定义的里面有逗号和().
1) 用花括号{ }括起来的表示一组(行)元素,如上面的a[0]={0,1}是数组a的第0行元素
2) 而用小括号( )括起来的是逗号表达式,逗号表达式的取值是最后一个元素的值,计算后的最终值是一个元素。
所以(2,3)的值是3,a[1][0]=3;(4,5)的值是5,a[1][1]=5.后面没有列出的元素默认是0.
所以整个数组完整表达出来是:
int a[3][2]={{0,1},{3,5}};
默认的a[2][0]=0,a[2][1]=0
3)想起链表了,用结构体数组初始化链表的时候,因为后面有一个next指针,所以定义结构体数组的时候都是:
P a[10]={{1},{2},{3},{4},{5},{6},{7},{8},{9},{10}}; //注意大括号里还有大括号,P是结构体类型
举例2:
将二维数组第一行的元素也改成逗号表达式
int main()
{
int a[3][2] = {(0,1),(2,3),(4,5)};
int *p;
p = a[0];
printf("%d\t",p[0]);//1
printf("%d\t",p[1]);//3
printf("%d\n",p[2]);//5
printf("%d\t",a[0][0]);//1
printf("%d\n",a[0][1]);//3
printf("%d\t",a[1][0]);//5
printf("%d\n",a[1][1]);//0
printf("%d\t",a[2][0]);//0
printf("%d\n",a[2][1]);//0
system("pause");
return 0;
}
此刻a={1,3,5};后续的元素默认都是0.