黑马程序员技术交流社区

标题: 召唤大神~~关于数组名访问二维数组的一个问题,又卡住了~~ [打印本页]

作者: baye1992    时间: 2016-3-2 11:41
标题: 召唤大神~~关于数组名访问二维数组的一个问题,又卡住了~~
#include <stdio.h>
void main()
{
        int a[3][2]={1,2,3,4,5,6};
        printf("&a[1][0] = %p\n",&a[1][0]);
        printf("a[1]     = %p\n",a[1]);
        printf("a+1      = %p\n",a+1);
        printf("___________________________________\n");

        printf("a[1][0] = %d\n",a[1][0]);
        printf("*a[1]   = %d\n",*a[1]);
        printf("*(a+1)  = %p\n",*(a+1));
        printf("**(a+1)  = %d\n",**(a+1));
        printf("___________________________________\n");
}

运行结果如下:




a+1 ==a[1]==&a[1][0]
*(a+1)不应该是等同于*a[1]==a[1][0]==3吗?
为什么*(a+1)==a+1 ?


作者: baye1992    时间: 2016-3-2 11:56
要疯了~~大神快出现啊。。。
作者: dx206    时间: 2016-3-2 12:26
你打印的是地址,怎么会等于3
作者: baye1992    时间: 2016-3-2 12:46
dx206 发表于 2016-3-2 12:26
你打印的是地址,怎么会等于3

为什么*(a+1)==a+1 ?
a+1就是地址了啊,前面加*不应该是取值了吗?
作者: 飘忽不定~    时间: 2016-3-2 21:59
这是什么,我去
作者: 堕落天使    时间: 2016-3-3 07:00
准确的说,不应该是a+1==a[1],应该是a+1指向数组的第二行,也就是a[1]这一行,*(a+1)才是取的a[1]的值,a[1]的值是a[1][0]的地址,再*一下才是取a[1][0]的值,行指针相当于二级指针,要两个*才是取元素的值。
作者: baye1992    时间: 2016-3-3 11:04
堕落天使 发表于 2016-3-3 07:00
准确的说,不应该是a+1==a[1],应该是a+1指向数组的第二行,也就是a[1]这一行,*(a+1)才是取的a[1]的值,a[ ...

非常感谢,你的意思我已经明白了。。。
但是,,C语言中一个地址不应该只代表一个存储空间嘛,如果p==&a,q==&a,*p和*q不应该相等吗?
我知道从含义上来讲,a+1和a[1]应该是两个意思,但是具体数值表示上,应该都是同一个二进制的数啊。。。
作者: Eric_Jia    时间: 2016-3-3 17:01
a,是数组的话, a 其实就是 &a[0], 也就是 数组第一个内容的地址.
如果理解了 a 就是 &a[0],   也就知道要访问a[0]内容的指针表示形式, 就是 *(a+0), 也就是 *a
a[1],的指针表示形式是 *(a+1)  .  (a+1) 等于 &a[1]; 理解了吗?
等理解了a[0] 和 a[1] 的指针表示形式,就应该知道 a+1 和 a[1]的关系了
*a 等于 a[0], *(a+1) 等于 a[1],  (a+1) 等于 &a[1], a等于 &a[0]
&a[1] - &a[0] 等于 1;


a + 1 不能以平常的算术加法理解,
应理解为指针偏移一个sizeof(type)字节,
即指针指向下数组中下一个元素的地址,
偏移的大小随数组中存储的变量类型不同而不同,
要从内存的思维理解,你可以随时打印出其内存地址观察下。
指针不能进行加减运算,可以这样理解,
虽然指针的值打印出来也是整数,
但指针也是一种数据类型,与整型不一样,
C语言又是强类型语言,所以不能混在一起运算,
什么是强类型语言,自己GOOGLE下,希望可以帮到你。
作者: baye1992    时间: 2016-3-4 11:01
Eric_Jia 发表于 2016-3-3 17:01
a,是数组的话, a 其实就是 &a[0], 也就是 数组第一个内容的地址.
如果理解了 a 就是 &a[0],   也就知道要访 ...

真心太感谢了!!!
尤其是最后几句话,我一直以为C语言中一切都是靠数字判断,把指针当成整型来看了。。。
作者: 897923460    时间: 2016-3-6 00:17

签到!!!!!大家加油,我们一起努力!!!!!
作者: Eric_Jia    时间: 2016-3-8 18:02
baye1992 发表于 2016-3-4 11:01
真心太感谢了!!!
尤其是最后几句话,我一直以为C语言中一切都是靠数字判断,把指针当成整型来看了。。 ...

加油,我们一起进步




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2