请问C++变量的内存地址的规律
#include<iostream>;
using namespace std;
void main(){
int a = 100,b = 100,c = 100,*p[3];
p[0] = &a;
p[1] = &b;
p[2] = &c;
//输出指针地址
for(int k = 0;k<3;k++){
cout<<p[k]<<endl;
}
//输出指针指向的变量的值
for(int k = 0;k<3;k++){
cout<<*p[k]<<endl;
}
system("pause");
}
上边的代码运行后输出如下:
0012FF60
0012FF54
0012FF48
100
100
100
请按任意键继续. . .
我想请教下,这里变量的内存地址
0012FF60
0012FF54
0012FF48
有什么规律,这些值是怎么来的?谁能讲讲,谢谢.
[解决办法]
没啥规律,系统分配的
[解决办法]
每个int实际占用了12字节...应该是本身只占用了4字节剩下的八个和你的编译器选项有关..
[解决办法]
在栈内存中 变量的生长方向是向下的 就是后分配的地址小
在堆内存中 变量的生长方向是向上的 就是后分配的地址大
[解决办法]
局部变量在栈中分配内存 栈中的增长方向由高向低
至于每个指向int型变量的指针实际占用12字节,就如楼上所说的 跟你的编译器选项有关
[解决办法]
字节对齐方式有关
[解决办法]
http://blog.chinaunix.net/u/16132/showart_221149.html
[解决办法]
应该是没有规律的。
[解决办法]
最近正在看汇编,所谓段地址 偏移地址,不知道能不能回答你的问题。
仅给思路,具体你自己查一下,因为我也不敢说很明白。
[解决办法]
系统自动分配的。
[解决办法]
一个int型变量在32位的机器上是占用4个字节的。所以连续定义的int型变量的地址差应该是4。即使对齐,按4字节对齐是标准的,所以也会是这个结果。之所以你的结果相差不是4,是因为你在Debug模式下编译的。如果你去Release模式下编译,你就会发现连续定义的int型变量的地址间隔就是4。因为在Debug模式下,编译器加入的一些额外信息占用了空间,并且不会对代码做任何优化,完全按照源代码来产生机器码。你再去试一下。