首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教C++变量的内存地址的规律

2012-03-20 
请问C++变量的内存地址的规律#includeiostreamusing namespace stdvoid main(){int a 100,b 100,c

请问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模式下,编译器加入的一些额外信息占用了空间,并且不会对代码做任何优化,完全按照源代码来产生机器码。你再去试一下。

热点排行