10.8 真的是每次学习c语言都有不同的体会

54 阅读1分钟

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 的。

stack.png

数组名的地址


	int array[10];
  • array 是数组名,等效于 &array[0];
  • &array 是取整个数组的地址,
  • &array + 1,会跳到下一个数组的首地址;而 &(array+1) 会跳到下一个元素的地址