简单理解下c语言指针与二维数组的赋值
void main()
{
int a[]= {1,2,3},(*p)[3];
p=a;
printf("%d,%d,%p",p[0][1],p[1]);
}
输出:2,964688200,0000000000000000
这里(*p)[3]
可以理解为指向了a[0]
的地址,然后从此开始(包括此)每三个元素,合并为一个一维数组
最后生成了二维数组,可以看到p[0][1]
的指向是正确的,但是p[1]
指向错误
这样也就可以理解下面
void main()
{
int a[2][3]= {{1,2,3},{4,5,6}},*p;
p=a;
printf("%d,%d",p[0],p[1]);
}
输出:1,2
为什么p[0],p[1]
指向的是a[0],a[1],因为这里没有按照[3]
来分数组,只生成了一维数组
*p[3]
就代表p是有3个最后指向int指针类型的数组
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。