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

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;  
} 
输出:




猜你喜欢

转载自blog.csdn.net/fuhuixin7497/article/details/78055958