xiawiner 发表于 2016-12-4 13:08:42

定义的数组指针,为什么*p跟p的值相等呢?求大牛解答

#include <stdio.h>
int main()

{
        int a = { 1,2,3 };
       

        int(*p) = &a;
        printf("%p %p\n",*p, p);






        return 0;
}

如上代码,希望大牛能够帮帮我,感谢。

xiawiner 发表于 2016-12-4 13:10:15

本人愚见是,*是取值运算符,它的值是指针变量P中的内容所指向的内存单元地址的值,那应该跟a的结果是一样的才对啊,为什么*p也会是一个地址呢?

xiawiner 发表于 2016-12-4 14:38:21

这个时候多么希望有个高手解答我的疑惑,我会静静的等待,感谢。

hb328496536 发表于 2016-12-4 14:58:51

*p本身就是个地址,在加个*就指向元素了

xiawiner 发表于 2016-12-4 15:01:36

hb328496536 发表于 2016-12-4 14:58
*p本身就是个地址,在加个*就指向元素了

你好,p本身存放的是一个地址,为什么*p还是这个地址呢

hb328496536 发表于 2016-12-4 15:01:52

指向指针的指针

xiawiner 发表于 2016-12-4 15:04:43

本帖最后由 xiawiner 于 2016-12-4 15:11 编辑

hb328496536 发表于 2016-12-4 15:01
指向指针的指针

我还是不明白{:5_107:},指向指针的指针不是**吗?

hb328496536 发表于 2016-12-4 15:06:49

我的理解是p   p本身就是指针,,,在加个(*p)等于是指向指针的指针,两个都是地址

hb328496536 发表于 2016-12-4 15:08:19

**p   应该就指向元素了

hb328496536 发表于 2016-12-4 15:09:05

我的大概理解,希望有大牛指教

xiawiner 发表于 2016-12-4 15:14:45

hb328496536 发表于 2016-12-4 15:08
**p   应该就指向元素了

*后面的操作数必须是指针型,P显然不是,会报错的,还是谢谢你发表意见,但是这种误导不是很值得赞赏

hb328496536 发表于 2016-12-4 15:28:51

**p还是可以的

hb328496536 发表于 2016-12-4 15:29:57

那就证明ppp里存的是指针地址了

hb328496536 发表于 2016-12-4 15:30:28

pp   p打错了

xiawiner 发表于 2016-12-4 15:39:07

本帖最后由 xiawiner 于 2016-12-4 15:50 编辑

越来越麻烦了,求一针见血的答案。{:10_284:}

四十二 发表于 2016-12-4 18:01:47

声明一个指针
int *p;          //假设此处为指针p开辟一个地址空间:1111 1111
a={1,2,3}    //声明数组a,假设为a开辟的地址空间: 1111 1112
那么假如
p=a;
上面这一行的意思是:指针p所在的地址单元所存放的数据是1111 1112

即p:1111 1111 | 11111112

         ↑地址空间   ↑存储内容



*p=&a;
这一行的内容你需要一个简单的前置概念:数组也可以近似看成一个指向一堆数据的指针。
意思是把指针p的地址改为数组a的指针地址,即:

p:1111 1112 | ____ ____

      ↑地址空间↑未初始化的存储空间
按照这种赋值方式,你应该是打印不出来数组中的数据的,因为你并不是赋值过去了一个正经的数据,而是改变了指针的地址。



可能你还是会说看不懂看不懂看不懂,不过我就喜欢不动脑子假装努力的人。

四十二 发表于 2016-12-4 18:04:14

顺便谢谢你的鱼币,10个太少了,我建议给我30个,够我买一节课。

xiawiner 发表于 2016-12-4 18:11:12

四十二 发表于 2016-12-4 18:01
声明一个指针
int *p;          //假设此处为指针p开辟一个地址空间:1111 1111
a={1,2,3}    //声明 ...

谢谢大牛的解答,我对内存的概念又有了新的见地。{:5_91:}

fc1735 发表于 2016-12-6 06:25:40

http://bbs.fishc.com/thread-79278-1-1.html

mhp0114 发表于 2017-2-7 12:30:36

本人愚见:
int(*p) = &a;//数组的指针,相当于是二级指针,指向指针的指针

比如 这样一个两行三列的数组:



p指向的是这个位置,但是他的步长是3,p+1后指向的是
而*p指向的是这个位置,但是如果(*p+1)所指向的是

而printf("%p %p\n",*p, p);这个所打印出的都是这个位置的地址
页: [1] 2
查看完整版本: 定义的数组指针,为什么*p跟p的值相等呢?求大牛解答