最好有关于这个问题的连接,因为这不是一句两句能说清楚的,包括动态分配二级指针,要new/delete和malloc/free都有的,以前看过关于这个问题的链接,现在找不到了。。。
int (*a)[5]; 就是数组指针,表示指向一个大小为5的整型数组。a++的距离就是5*sizeof(int);
int *a[5]; 就是指针数组,表示数组里面存的都是指针,a++的距离不过是一个整型指针的距离,大小一般为4.
你两个a++距离说错了,因此无法给你分数。。。
int (*a)[5]是一个指向“一群”数组的指针,因此只是一个指针,大小为4。
int *a[5]是5个指向指针的指针,因此为5*sizeof(int)
请你用VC打印一下地址看看,到底是我错了还是你错了,谢谢!
PS:作为数组指针,虽然a是一个指针,其大小为4,但是a++,表示指向下一个数组,跳过的距离是整个数组的长度。
数组指针,一个元素就是一个指针,跳过的元素也就是一个指针的距离,大小为4。
你仔细看看你原文怎么写的,我追问的上半部分是复制你写错的内容,并且我也试验过了。
int (*a)[5] sizeof(a)结果为4,a它只是一个指针,这个指针指向了无数个大小固定为5的数组。
int *a[5] sizeof(a)结果为20,a它可以说是一个数组它的长度决定于[]内数字的大小
我难道不知道int (*a)[5]是一个指针吗,我是指a++的地址减去a的地址,难道是等于sizeof(a)吗,滑天下之大稽
追问求int (*a)[5]和int *a[5]如何求a++与a的距离,还有,sizeof(a)不能说明a++到a的距离吗???求解释
追答#include
int main()
{
int (*a)[5];
int b[4][5];
a = b;
a++;
printf("%d\n",a);printf("%d\n\n",b);
int *c[5];
printf("%d\n",&c[1]);
printf("%d\n",&c[0]);
return 0;
}
这个链接的下半部分是我以前看见过的,我想找的就是那个,但是想要原文,原文当中还有malloc和free的举例,这个链接虽然在百度文库,但是也是转载并且不全。。。
本回答被提问者采纳