C++指针存放内容

都说c++的指针存放的是内存地址没错。但今天在写程序的时候发现,这样的话:int*p=1;cout<<p<<endl;//p=1;那这里的p存放的是数据呀,并且这里的指针... 都说c++的指针存放的是内存地址没错。但今天在写程序的时候发现,这样的话:
int * p = 1;
cout<<p<<endl;// p = 1;
那这里的p存放的是数据呀,并且这里的指针p和数据1存放在哪里啊?堆还是栈区,1是静态常量区的数据吗?求大神们解惑~。谢谢啦
展开
 我来答
木有想到GK5ym
2018-02-26 · TA获得超过208个赞
知道小有建树答主
回答量:207
采纳率:90%
帮助的人:125万
展开全部

要回答这个问题,首先要知道

int * p = 1;

这句代码到底做了什么

先说int* p,这是定义一个变量p,类型是int指针类型。

变量永远是在栈区分配的

p是个变量,是一个指针类型而已,其实跟int类型,float类型,struct类型,一样的。

指针类型一般占了4个字节的内存空间,所以p也占了4个字节的内存。

内存是一片连续的空间,所有的内存,都会有一个地址。

这片空间上可以存放一个数值。

int * p = 1;

系统首先在栈上分配4个字节的内存,然后存放一个1的数值。

指针是指向一个地址的,*p是取出来它指向空间里面的值,就是内存地址为1,里面存的值。

这里有三个值,分清楚

&p,系统为p变量分配的栈区内存首地址

p,代码赋给p变量的值,也是一块内存的首地址。上例的值就是1

*p,取出来那一块内存里面存放的值。内存地址1里面的内容,上例中1里面存的值是未知的

与普通的int a = 1;对比一下

&a,系统为a变量分配的栈区内存首地址

a,代码赋给a变量的值,这例的值也是1

一个变量出来以后,所有的&x,x的意义是完全一样的。指针会有一个额外的*运算而已。

至于p指针指向的内容是堆还是栈,依具体情况而定

至于那个1,他是个常量,不是变量,所以没有地址,也没有是堆还是栈的问题

筽晓雾
2018-02-26 · TA获得超过155个赞
知道答主
回答量:124
采纳率:68%
帮助的人:41.8万
展开全部
1是程序中的常量,赋值给了变量p,p存储的内容是1,p指向地址为1的内存单元(这个内存单元的使用权并没有分配给此程序,因此这是个野指针).
更多追问追答
追答
不论何种类型的变量,都是一段存储数据的内存空间,变量的类型是告诉编译器这个变量里存储的应该是个什么样的数据,被怎么使用时要报错(如赋值,传参等操作),并告诉查看代码的程序员,这块内存区域存储的数据应该怎么解读(如储存的是字符的编码,或者是某个内存单元的地址等)
追问
那请问这个1存在哪里呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式