定义的数组指针,为什么*p跟p的值相等呢?求大牛解答
#include <stdio.h>int main()
{
int a = { 1,2,3 };
int(*p) = &a;
printf("%p %p\n",*p, p);
return 0;
}
如上代码,希望大牛能够帮帮我,感谢。 本人愚见是,*是取值运算符,它的值是指针变量P中的内容所指向的内存单元地址的值,那应该跟a的结果是一样的才对啊,为什么*p也会是一个地址呢? 这个时候多么希望有个高手解答我的疑惑,我会静静的等待,感谢。 *p本身就是个地址,在加个*就指向元素了 hb328496536 发表于 2016-12-4 14:58
*p本身就是个地址,在加个*就指向元素了
你好,p本身存放的是一个地址,为什么*p还是这个地址呢 指向指针的指针 本帖最后由 xiawiner 于 2016-12-4 15:11 编辑
hb328496536 发表于 2016-12-4 15:01
指向指针的指针
我还是不明白{:5_107:},指向指针的指针不是**吗? 我的理解是p p本身就是指针,,,在加个(*p)等于是指向指针的指针,两个都是地址 **p 应该就指向元素了 我的大概理解,希望有大牛指教 hb328496536 发表于 2016-12-4 15:08
**p 应该就指向元素了
*后面的操作数必须是指针型,P显然不是,会报错的,还是谢谢你发表意见,但是这种误导不是很值得赞赏 **p还是可以的 那就证明ppp里存的是指针地址了 pp p打错了 本帖最后由 xiawiner 于 2016-12-4 15:50 编辑
越来越麻烦了,求一针见血的答案。{:10_284:} 声明一个指针
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 | ____ ____
↑地址空间↑未初始化的存储空间
按照这种赋值方式,你应该是打印不出来数组中的数据的,因为你并不是赋值过去了一个正经的数据,而是改变了指针的地址。
可能你还是会说看不懂看不懂看不懂,不过我就喜欢不动脑子假装努力的人。 顺便谢谢你的鱼币,10个太少了,我建议给我30个,够我买一节课。 四十二 发表于 2016-12-4 18:01
声明一个指针
int *p; //假设此处为指针p开辟一个地址空间:1111 1111
a={1,2,3} //声明 ...
谢谢大牛的解答,我对内存的概念又有了新的见地。{:5_91:} http://bbs.fishc.com/thread-79278-1-1.html 本人愚见:
int(*p) = &a;//数组的指针,相当于是二级指针,指向指针的指针
比如 这样一个两行三列的数组:
p指向的是这个位置,但是他的步长是3,p+1后指向的是
而*p指向的是这个位置,但是如果(*p+1)所指向的是
而printf("%p %p\n",*p, p);这个所打印出的都是这个位置的地址
页:
[1]
2