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