全局变量存储在静态变量区,地址按变量定义先后顺序依次增大。
main中定义变量存储在栈区,地址按变量定义先后顺序依次减小。
局部变量存储在栈区,地址按变量定义先后顺序依次减小。
局部变量中的数组内部元素的地址也是由低到高的方向存储的。
main中定义的也算局部变量。
ps:而且能发现main中和子函数中的数据存储地址是不连续的。
一、数组地址偏移与指向数组指针偏移
例如,定义一个数组,如下:
unsigned char Data[3]={1,2,3};
那么有:
A、Data或者&Data[0] 都是表示这个数组的起始地址。
其关系有:
1.地址关系:&Data[0] = Data 、&Data[1] = Data+1、&Data[2] = Data+2;
2.数值关系:Data[0] = *Data = 1;Data[1] = *(Data+1) = 2 ;Data[2] = *(Data+2) = 3;
B、&Data表示整个数组的起始地址(基地址),其偏移量为整个数组内存大小。
1.&Data + 1表示起始地址(基地址)整体偏移一个内存,即表示&Data[3]
2.&Data + 2表示起始地址(基地址)整体偏移两个内存,即表示&Data[6]