C语言中,二维数组matrix,*(matrix+1)+5为什么是指向第二行第六个元素

而不是给第二行第一个元素的值加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]值的意思!
温馨提示:答案为网友推荐,仅供参考
第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个*才是赋值

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网