10.8 真的是每次学习c语言都有不同的体会
变量的存储方式
#include <iostream>
using namespace std;
int main(){
int var1;
int var2;
int var3;
cout << &var1 << endl;
cout << &var2 << endl;
cout << &var3 << endl;
}
首先明确内存条是从下往上,低地址向高地址编码的,而栈区是从上往下,高地址优先分配给变量的。
以上代码依次定义了三个变量 var1,var2,var3,其存储情况如下图。
以var1为例,var1存储在内存的栈区,在编译阶段进行静态分配,所以在栈区分配了高地址 44 给 var1。
为什么有 4 个黄色的格子呢?其实这里一个int类型占用 4 字节,而一个内存条是 1 个byte,也就是一个黄色格子,所以需要4个内存条,即4个黄色格子。
接着才开始分配给 var2 内存地址 40 的。
数组名的地址
int array[10];
- array 是数组名,等效于 &array[0];
- &array 是取整个数组的地址,
- &array + 1,会跳到下一个数组的首地址;而 &(array+1) 会跳到下一个元素的地址