C++指针存放内容
都说c++的指针存放的是内存地址没错。但今天在写程序的时候发现,这样的话:int*p=1;cout<<p<<endl;//p=1;那这里的p存放的是数据呀,并且这里的指针...
都说c++的指针存放的是内存地址没错。但今天在写程序的时候发现,这样的话:
int * p = 1;
cout<<p<<endl;// p = 1;
那这里的p存放的是数据呀,并且这里的指针p和数据1存放在哪里啊?堆还是栈区,1是静态常量区的数据吗?求大神们解惑~。谢谢啦 展开
int * p = 1;
cout<<p<<endl;// p = 1;
那这里的p存放的是数据呀,并且这里的指针p和数据1存放在哪里啊?堆还是栈区,1是静态常量区的数据吗?求大神们解惑~。谢谢啦 展开
2个回答
展开全部
要回答这个问题,首先要知道
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,他是个常量,不是变量,所以没有地址,也没有是堆还是栈的问题
展开全部
1是程序中的常量,赋值给了变量p,p存储的内容是1,p指向地址为1的内存单元(这个内存单元的使用权并没有分配给此程序,因此这是个野指针).
更多追问追答
追答
不论何种类型的变量,都是一段存储数据的内存空间,变量的类型是告诉编译器这个变量里存储的应该是个什么样的数据,被怎么使用时要报错(如赋值,传参等操作),并告诉查看代码的程序员,这块内存区域存储的数据应该怎么解读(如储存的是字符的编码,或者是某个内存单元的地址等)
追问
那请问这个1存在哪里呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询