,关于指针的的有关问题
求助,关于指针的的问题!string s123string *p&scout p endl以上输出一个指针的内容,也就是指
求助,关于指针的的问题!
string s="123";
string *p=&s;
cout << p <<endl;
以上输出一个指针的内容,也就是指针存储的地址。
有一个不理解的地方就是,每次我运行程序,输出的内容都是一样的 ,比如‘0012FF34’这种地址,
按我的理解地址不是随机分配的吗,为什么程序每次运行变量s的地址都是一样的呢?
[解决办法]在windows环境下显示的地址是线性地址,并不是真正的物理地址。
LZ试试在windows环境下(不是在编程的IDE中),连续点击这个程序(EXE文件)的图标,看看几个窗口中的显示----尽管几个程序不可能同时运行在相同的物理地址空间中,但同时运行的显示结果应该是相同的(线性地址)
即操作系统在运行程序时会自动地将相同的线性地址变换到不同的物理地址空间中去的
[解决办法]1)操作系统:
不同操作系统可能不同,比如DOS ,Linux,Unix估计是不同的,但是也可能是相同的;
Windows 物理地址是不能用
string s="123"; string *p=&s; cout << p <<endl;
这样获取的,这样取得的是虚拟地址;
基本上每个程序的虚拟地址的起始地址,都是相同的;
程序每次运行都是,加载到相同虚拟地址的;
那么,编译好的程序的代码和数据,基本上每次的虚拟地址的也是相同的;
于是同一个变量的地址,每次程序运行应该也是相同的;
所以,输出结果也是相同的。
2)编译器,一般一个编译好的程序,数据地址是确定的,除非加载时另有处理;