duoqingang 发表于 2020-8-23 13:42:45

关于指针问题,请看代码,大神能否解释下代码中的疑问

#include <stdio.h>
int main(void)
{   int *o;
    int i=3;
    o=&i;
    printf("*o:%d\n",*o);
    printf("o:%p\n",o);
    printf("o:%d\n",o);
    int array={{1,2,3},{4,5,6}};
    int (*p)=array;
    printf("*p:%d\n",*p);//疑问这里的*p和上面的*o写法一样,为什么上面是取该指针变量指向的值,底下*p是存放的指针(地址)
    printf("*p:%p\n",*p);
    printf("*(*p):%d\n",*(*p));
    printf("**(p+1):%d\n",**(p+1));
    return 0;
}
运行结果:
*o:3
o:000000000061FE0C
o:6422028
*p:6422000
*p:000000000061FDF0
*(*p):1
**(p+1):4

lhgzbxhz 发表于 2020-8-23 15:39:52

p是指向指针的指针,也就是说p指向的地址中的值是另一个指针,另一个指针所指向的地址中的值才是真正的值

昨非 发表于 2020-8-23 21:26:39

数组名本身就是指针,根据注释的上一行可以理解为,*p是指向数组名的指针(个人理解)

风过无痕1989 发表于 2020-8-23 22:15:34

本帖最后由 风过无痕1989 于 2020-8-23 22:18 编辑

&i 就是取变量 i 的地址,然后将该地址交给了变量 o ,也即 o 贮存的是 i 的地址,*o 是指针变量,通过该指针变量存储的数据(地址),能够间接获得该地址上的数据 i,printf("o:%p\n",*o);

array 本是个二维数组,但若是你将 array 看作是该数组的名称的话,那它就成了一维数组。array 这个数组名就可以看成是一个地址的指针。------ “C语言标准规定,当数组名作为数组定义的标识符(也就是定义或声明数组时)、sizeof 或 & 的操作数时,它才表示整个数组本身,在其他的表达式中,数组名会被转换为指向第 0 个元素的指针(地址)。”

有了这个概念后,就不难理解 array = p 指向的是一个地址,也就是 array 这个单元的地址,*p = *array 就是取得 array 的值,这个值它就是一个地址。

加载中.. 发表于 2020-8-24 10:41:26

首先,数组名里存放的是数组第一个数的地址,从某种角度看,数组名类似于指针(但他不是指针)

其次,int (*p)=array;这行语句创建了一个名字为“*p”的数组,所以*p存放的是该数组第一个元素的地址(划重点),而不是值。

duoqingang 发表于 2020-8-24 23:10:04

加载中.. 发表于 2020-8-24 10:41
首先,数组名里存放的是数组第一个数的地址,从某种角度看,数组名类似于指针(但他不是指针)

其次,in ...

int (*p)是一个数组指针啊,他指向一个数组,他不是数组啊{:5_94:}

风过无痕1989 发表于 2020-8-25 09:21:24

duoqingang 发表于 2020-8-24 23:10
int (*p)是一个数组指针啊,他指向一个数组,他不是数组啊

对的,*p 是一个数组指针,指向的是 array 这个数组名的三列数组

Cool_Breeze 发表于 2020-8-25 13:46:25

定义时 p 和 o 的写法都不一样呢!

加载中.. 发表于 2020-8-26 12:13:04

duoqingang 发表于 2020-8-24 23:10
int (*p)是一个数组指针啊,他指向一个数组,他不是数组啊

不好意思,是我菜了,忘了还有这个概念,不好意思

xiaozhangxuexi 发表于 2020-8-26 20:53:22

本帖最后由 xiaozhangxuexi 于 2020-8-26 21:33 编辑

之前被这个问题困扰过一段时间。定义的p是指向有三个元素的数组的指针。指向数组的指针与指向数组元素的指针可不一样哈。指向数组元素的指针就是直接指向数组第一个元素,现在我们用的指向数组指针它就是直接指向一个数组的,不知道具体指向哪个元素。在这里p指向的是二维数组array中的第一行这个数组。之后进行*p取值操作后*p就是二位数组array中第一行的首个元素的地址了。

duoqingang 发表于 2020-8-28 12:17:21

本帖最后由 duoqingang 于 2020-8-28 12:18 编辑

Cool_Breeze 发表于 2020-8-25 13:46
定义时 p 和 o 的写法都不一样呢!

注意到了,一个是定义指针变量,一个是定义数组指针

duoqingang 发表于 2020-8-28 12:25:02

xiaozhangxuexi 发表于 2020-8-26 20:53
之前被这个问题困扰过一段时间。定义的p是指向有三个元素的数组的指针。指向数组的指针与指向数组元素的指 ...

有道理
页: [1]
查看完整版本: 关于指针问题,请看代码,大神能否解释下代码中的疑问