最简单的指针的问题

huamiaomiao 2009-05-14 09:09:20
假如我定义了一个char *p;
这时候系统在栈内给他分配空间了吧?

接着我定义
char a='m';
p = a ;
2个地址应该一样了吧?
为什么 我用 cout<<&p<<&a;
输出的又不一样,望详细点解释,最好有内存图
...全文
103 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xempo 2009-05-15
  • 打赏
  • 举报
回复
&p与&a都是地址的地址。
p=a;指p存a的地址。
但p自身所占的空间的地址(&p)就不同于a了。
papaofdoudou 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 huamiaomiao 的回复:]
经过调试发现

cout < <a < <&a; 输出相等!都是a的地址
cout < <&p; 为什么这个输出的和上面的不相等???
[/Quote]
你的描述都不清楚,
char a[5]="hi";
cout < <a < <&a;怎么会相等呢?
写错了吧
看一些基础的书吧,书上都有
w0911h 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 huamiaomiao 的回复:]
经过调试发现

cout < <a < <&a; 输出相等!都是a的地址
cout < <&p; 为什么这个输出的和上面的不相等???
[/Quote]

p本身是分配在栈上的空间,这个空间的内容是a的地址,再对p取址当然不一样了
papaofdoudou 2009-05-14
  • 打赏
  • 举报
回复
“接着我定义
char a[5]="hi";
p = a ;
2个地址应该一样了吧?
为什么 我用 cout < <&p < <&a;
输出的又不一样,望详细点解释,最好有内存”

你最后输出的是栈内存中的p指针的地址和栈内存中的连续五个字节数组的首地址的地址,分别是两个不同的指针的地制值,当然结果不一样了;
你这样输出结果就对了
cout<<p<<endl<<a<<endl;

char* p 定义了指针p,存放在栈区,没有初始化的时候是一个随机值,指向一片随机的内存区。p=new char[5],在堆区分配5个字节存放字符,p仍然在栈区,,占用四个字节。
王小工 2009-05-14
  • 打赏
  • 举报
回复
一楼数的不错
定一下
嘻嘻
huamiaomiao 2009-05-14
  • 打赏
  • 举报
回复
经过调试发现

cout<<a<<&a; 输出相等!都是a的地址
cout<<&p; 为什么这个输出的和上面的不相等???
huamiaomiao 2009-05-14
  • 打赏
  • 举报
回复
char *p;
char a[5]="hi";
p = a ;
2个地址应该一样了吧?
为什么 我用 cout < <&p < <&a;
输出的又不一样,望详细点解释!!!!!!!!!!!!!!!!!!!!!!
crst_zh 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huamiaomiao 的回复:]
char *p;
我就这样定义一下,这个p在哪里占据了空间? 是不是在栈里占据了4字节? 如果 p=new char [5];的话。就会在堆里给他分配5字节?
[/Quote]

为p分配4字节(栈上),还在堆上分配5字节,保存堆上分配的5字节的首地址
huamiaomiao 2009-05-14
  • 打赏
  • 举报
回复
char *p;
我就这样定义一下,这个p在哪里占据了空间? 是不是在栈里占据了4字节? 如果 p=new char [5];的话。就会在堆里给他分配5字节?
pengzhixi 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 huamiaomiao 的回复:]
不好意思 我写错了 是这样的

假如我定义了一个char *p;
这时候系统在栈内给他分配空间了吧?

C/C++ code
接着我定义
char a[5]="hi";
p = a ;
2个地址应该一样了吧?
为什么 我用 cout < <&p < <&a;
输出的又不一样,望详细点解释,最好有内存


[/Quote]

char *p;这样分配了空间不过里面的地址是垃圾值.
huamiaomiao 2009-05-14
  • 打赏
  • 举报
回复
不好意思 我写错了 是这样的

假如我定义了一个char *p;
这时候系统在栈内给他分配空间了吧?

接着我定义
char a[5]="hi";
p = a ;
2个地址应该一样了吧?
为什么 我用 cout < <&p < <&a;
输出的又不一样,望详细点解释,最好有内存
crst_zh 2009-05-14
  • 打赏
  • 举报
回复
编译能通过,a只是一个名字,建立在静态数据区,对a取地址会分配内存,保存a的地址。
对于p,会分配一个内存,用来存一个地址。查“常量折叠”就明白了。
Paradin 2009-05-14
  • 打赏
  • 举报
回复
upup
w0911h 2009-05-14
  • 打赏
  • 举报
回复
char *p;p这个指针本身存在堆栈中,在32位机上就是4bytes
p = a;这是错的,取址应该是p = &a;
char a = 'm';
char *p;
p = &a;
cout << p << &a;
输出的才一样
xempo 2009-05-14
  • 打赏
  • 举报
回复
a不是指针,而&p是指针的指针了。
以上你所说的,应该编译不过。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧