而不是给第二行第一个元素的值加5?
C和指针157页
谢谢
因为它是二维数组不是一维数组!二维数组定义了:int a[m][n],脚标从0开始,那么a[m]也就是第m-1行的第一个元素,相当于a[m][0],但是你不能直接*a[m]来输出那个值,你必须要*a[m][0],才能输出那个值!因为C语言语法规定了,对于二维数组,*a[m]这种写法表示指针指向第m-1行,而不是取值,然后*a[m]+5 是代表在第m-1行中,取第5列的数值,这时,
*(*(matrix+1)+5)就是取值的意思
对于一维数组的话,*a[m]就是取a[m]值的意思!
*(*(matrix+1)+5)就是取值的意思
对于一维数组的话,*a[m]就是取a[m]值的意思!
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2018-04-30
数组名是指向第一个元素的指针,matrix第一个元素是什么?由于是二维数组,所以可以看作是整个第一行,所以matrix指向第一行,+1后指向第二行
*(matrix+1)就得到第二行这个一维数组,一维数组名指向第一个元素,所以*(matrix+1)指向第一个元素,+5后指向第六个元素
希望能帮到你!不懂在问吧
本回答被网友采纳第2个回答 2014-08-07
二维数组的数组名和一维数组的数组名一样,都是表示数组中首个元素的地址。而二维数组可理解成每个元素都是一维数组的一维数组,因此 matrix + 1 就表示跳一行,即跳到第二个元素,就是第二行,再 + 5 就是跳到第六个元素。
第3个回答 2014-08-07
*(matrix+1)得到第二行首元素的地址,比如
int *p=*(matrix+1);
p+5就得到第6个元素,只是相加而已,并没有赋值
第二行第一个元素+5这样写:
int* p=*(matrix+1);第二行第一个元素
*p=5;
合起来 *( *(matrix+1))=5;
二维数组要有2个*才是赋值
int *p=*(matrix+1);
p+5就得到第6个元素,只是相加而已,并没有赋值
第二行第一个元素+5这样写:
int* p=*(matrix+1);第二行第一个元素
*p=5;
合起来 *( *(matrix+1))=5;
二维数组要有2个*才是赋值