您的位置:首页 > 其它

c中定义变量的内存分配顺序问题

2017-09-21 19:34 423 查看
1、局部变量,存储在栈中,其分配地址根据变量声明顺序是递减的,如i和j。i先声明,i的地址高,j后声明,j的地址低。

#include <iostream>
using namespace std;
int b;
int a;
int c;
int arr[2];
int d;
void main() {
int ar[2];
int i;
int j;
cout<<&i<<" "<<&j<<" "<<&ar[0]<<" "<<&ar[1]<<" "<<&ar[2]<<" "<<&ar[3]<<endl;

cout<<&a<<' '<<&b<<' '<<&c<<endl;
cout<<&arr[0]<<' '<<&arr[1]<<' '<<&arr[2]<<" "<<&c<<endl;

cout<<&arr[0]<<' '<<&arr[1]<<' '<<&arr[2]<<" "<<&d<<endl;
} 输出结果:



2、全局变量,存储在数据区(全局变量和静态变量),空间分配是按照声明变量的字母顺序按照空间递增顺序进行分配的。注意内存越界问题。

int b;
int a[2];
void main() {
cout<<&a[0]<<' '<<&a[1]<<' '<<&a[2]<<endl<<&b<<endl;
} 输出结果:



当先声明数组,再声明变量时,a[2]数组越界,a[2]的地址与b的地址一样。

int a[2];
int b;
void main() {
cout<<&a[0]<<' '<<&a[1]<<' '<<&a[2]<<endl<<&b<<endl;
} 输出:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐