240页定义了int a[3][5],i,j,*p;p=a[0];
而例10.8中定义int a[3][5],i,j,(*p)[5];p=&a[0];
两种定义方式,有什么区别,都在什么情况下适用?
为什么一个前面没有&,一个赋值&a[0]呢?如果分别都加上&和去掉&,还能如原来一样运行吗?
李木子 发表于2018-01-05 11:47
你好:
看你怎么定义指针嘛,这2种方法都可以,如果定义的是(*p)[5],那就使用p=&a[0],如果定义*p,就使用p=a[0]
同样是指向二维数组。(*p)[5]和*p[5]意义一样吗?什么情况下要用指针数组呢,光是指针不就可以达到目的吗?
p=&a[0]是指零行的首地址吧,p+1意义是下一行首地址?
p=a[0]是指零行首个元素的地址,然后p+1是下一个元素的地址?
所以涉及全部二维数组赋值和输出的时候,要用p=a[0],这样自加就可以得到所有元素的值,实际上p=a也可以得到相同的结果吧,目的只是将首个元素的地址给p;但是用行和列来赋值的时候,就要定义p=&a[0],这样可以切换行和列,达到*(p+i)+j的效果来输入和输出,可以这样理解吗?
但是行和列来操作的时候,不定义指针数组不行吗,直接定义指针然后赋值p=&a[0],不也是一个意思吗,为什么执行时有错误呢?