实验1:
#include
using namespace std;
int main()
{
int *a,p=10;
a=&p;
cout<cout<<*a<
}
输出:
0x7fbffff7e4
10
接着改代码:
实验2:
#include
using namespace std;
int main()
{
int *a=(int *)0x7fbffff7e4,p=10;
*a=33;
cout<cout<<*a<
}
输出:
0x7fbffff7e4
33
接着换一台机器:
运行上边代码:正常
输出:
0x7fbffff7e4
33
注释掉赋值那一句话:
输出:
0x7fbffff7e4
48
正常
实验3:
把地址改为0x7fbffff7e3,
输出:
0x7fbffff7e3
12331
正常。
推测:是不是地址的问题。
程序运行的时候,不同的内容存放在不同的地方:
代码区:就是存放你的程序的编译后的可执行代码的地方了
数据区:存放你的程序静态数据,如全局变量、常量等。
栈:在函数调用中,保存程序的当前运行状态、函数的参数、返回结果等。
堆:在分配给一个程序的内存中,除了上面三部分,剩下的就是堆了,也就是程序的自由空间,局部变量(自动变量)等,还有New给指针用的空间,都在这里分配。
你按绝对地址访问,
你能保证这个地址一定存在?或有访问权限?
同求!!
int *a=(int*)(0x00467938);
你 这里是想表达什么意思?