C++指针指向多维数组为什么不能用递增

来源:百度知道 编辑:UC知道 时间:2024/05/26 19:44:35
#include<stdio.h>
#include<conio.h>
int main()
{
int a[4][5];
int (*b)[5];
b=a;
int c,d;
for(c=0;c<4;c++)
{
for(d=0;d<5;d++)
{
*((*b)+d)=5*c+d;
}
b++;
}
b=a;
for(c=0;c<4;c++)
{
for(d=0;d<5;d++)
{
printf("%4d ",*((*b)+d));
}
printf("\n");
b++;
}
getch();
return 0;
}
以上为程序代码
*((*b)+d)=5*c+d;此行换成这样:
*((*b)++)出错,为什么呢,换成++递增应该也是可以的啊

printf("%4d ",*((*b)+d));这行也是,换成++递增后编译也出错
这是为什么呢?
请教请教

当然是不能正确编译的啊,看起来貌似是相同的操作,*((*b)+d)与*((*b)++),似乎是一个操作,但是后者有明显的不同,因为b是一个指向指针的指针,也就是说起自身是一个地址值,而这个值是不可改变的,懂吗?否则的话b就可能指向了一个莫名其妙的地址,对系统造成损坏,这个就是原因,b++的时候,b值自身就改变了,而b+d得时候,b值自身是没有改变的,只是整个表达式的值偏移了

对不起看错了,我再仔细看看
不能用++,因为d是个指针,指向了一个一维数组,而不是和平常一级指针那样,指向一个变量,所以*d取得的是这个一维数组的首地址,地址本身是个常数,当然无法++.

*((*b)++):

++是自增,要改变自己的地址值的,这样是不允许的!

这里地址是常量不能自增!

而*((*b)+d)=5*c+d;就没有对自己(*b)进行修改……

仅以数语已抛砖引玉

*b是a的地址,是常量,不能++