求助,关于指针的的问题!

走你_ 2013-07-04 08:10:54
string s="123";
string *p=&s;
cout << p <<endl;

以上输出一个指针的内容,也就是指针存储的地址。
有一个不理解的地方就是,每次我运行程序,输出的内容都是一样的 ,比如‘0012FF34’这种地址,
按我的理解地址不是随机分配的吗,为什么程序每次运行变量s的地址都是一样的呢?
...全文
89 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-07-04
  • 打赏
  • 举报
回复
引用 楼主 beyond789654 的回复:
string s="123";
string *p=&s;
cout << p <<endl;
以上输出一个指针的内容,也就是指针存储的地址。 有一个不理解的地方就是,每次我运行程序,输出的内容都是一样的 ,比如‘0012FF34’这种地址, 按我的理解地址不是随机分配的吗,为什么程序每次运行变量s的地址都是一样的呢?
1)操作系统: 不同操作系统可能不同,比如DOS ,Linux,Unix估计是不同的,但是也可能是相同的; Windows 物理地址是不能用 string s="123"; string *p=&s; cout << p <<endl; 这样获取的,这样取得的是虚拟地址; 基本上每个程序的虚拟地址的起始地址,都是相同的; 程序每次运行都是,加载到相同虚拟地址的; 那么,编译好的程序的代码和数据,基本上每次的虚拟地址的也是相同的; 于是同一个变量的地址,每次程序运行应该也是相同的; 所以,输出结果也是相同的。 2)编译器,一般一个编译好的程序,数据地址是确定的,除非加载时另有处理;
赵4老师 2013-07-04
  • 打赏
  • 举报
回复
摒弃cout;使用printf
cao_julians 2013-07-04
  • 打赏
  • 举报
回复
引用 2 楼 u010936098 的回复:
至于每次运行时是不是一样,取决于操作系统。由于线性地址隔离机制,每个进程都运行在一个独立的线性地址空间,地址相同也没什么奇怪的。
在windows环境下显示的地址是线性地址,并不是真正的物理地址。 LZ试试在windows环境下(不是在编程的IDE中),连续点击这个程序(EXE文件)的图标,看看几个窗口中的显示----尽管几个程序不可能同时运行在相同的物理地址空间中,但同时运行的显示结果应该是相同的(线性地址) 即操作系统在运行程序时会自动地将相同的线性地址变换到不同的物理地址空间中去的
AndyStevens 2013-07-04
  • 打赏
  • 举报
回复
cout <<std::hex<< p <<endl;
走你_ 2013-07-04
  • 打赏
  • 举报
回复
引用 1 楼 u010936098 的回复:
cout << p <<endl 输出的是指针的“值”,而不是它指向的对象。 换句话说,它输出的是它指向的对象的地址。 字符指针除外,ostream为字符指针进行了重载,以支持C字符串。
审题不仔细,扣10分
我看你有戏 2013-07-04
  • 打赏
  • 举报
回复
在不同的两天上面运行看看,地址还是一样吗 我记得在调试的时候,每次看地址,好像都是一样的值
Lyinsc 2013-07-04
  • 打赏
  • 举报
回复
为什么要纠结这个问题? 内存分配不是随机的,也不可能随机分配,是按一定规则分配的,最起码分配的内存都必须是空闲的内存
橡木疙瘩 2013-07-04
  • 打赏
  • 举报
回复
至于每次运行时是不是一样,取决于操作系统。由于线性地址隔离机制,每个进程都运行在一个独立的线性地址空间,地址相同也没什么奇怪的。
橡木疙瘩 2013-07-04
  • 打赏
  • 举报
回复
cout << p <<endl 输出的是指针的“值”,而不是它指向的对象。 换句话说,它输出的是它指向的对象的地址。 字符指针除外,ostream为字符指针进行了重载,以支持C字符串。

64,670

社区成员

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

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