void main()
{
int a[][4]={ 5,7,5,9,
4,6,3,1,
2,9,0,6};
int *p;
int *q [4];
p=(int *)a;
q=a;
printf("n %u %u",p,q);
p++;
q++;
printf("n %u %u",p,q);
}
我的问题是我们可以将二维数组分配给指针数组吗?上面的代码显示错误为1.c: In function ' main ':1.c:14:6:错误:赋值给数组类型的表达式
在C语言中,数组不是一等公民:
- 数组在表达式 中使用时将衰变成指针
- 永远不能赋值给数组
如果q
是一个指针数组,答案是否定的,你不能给数组赋值。
如果你想让q
是指向数组的指针,你必须声明它为int (*q)[4];
:
int(*q)[4];
q = a;
您可以使用它来访问a
的元素:q[i][j]
与a[i][j]
相同(q[i]
与q[j]
相同)