【学习笔记】【C语言】变量的内存分析
1. 字节和地址
为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”。
1> 内存以“字节为单位”
0x表示的是十六进制,不用过于纠结,能看懂这些数字之间谁大谁小就行了
2> 不同类型占用的字节是不一样的,数据越大,所需的字节数就越多
2. 变量的存储
1> 所占用字节数跟类型有关,也跟编译器环境有关
2> 变量实例
int b = 10;
int a = 20;
内存由大到小寻址,优先分配内存地址较大的字节给变量。b的内存地址比a大
每个变量都有地址:第一个字节的地址就是变量的地址
3> 查看内存地址:
int a;
printf("a的地址是:%p\n", &a);
4> 注意
在变量未经初始化之前,不要尝试使用变量的值
int a;
printf("a的值是:%d\n", a);
上面的写法是不建议的
3.课程代码
1 #include <stdio.h> 2 3 4 // 1.内存寻址由大到小,优先分配内存地址比较大的字节给变量 5 6 // 2.变量越先定义,内存地址就越大 7 8 //3.取得变量的地址:&变量名 9 10 // 4.输出地址:%p 11 12 //5.一个变量一定先进行初始化,才能使用 13 14 15 int main() 16 { 17 // 内存寻址由大到小 18 int a = 10; 19 20 int b = 20; 21 22 int c; 23 24 // &是一个地址运算符,取得变量的地址 25 // %p用来输出地址 26 // 0x7fff56f09bc8 27 printf("a的地址是:%p\n", &a); 28 // 0x7fff56f09bc4 29 printf("b的地址是:%p\n", &b); 30 // 0x7fff56f09bc0 31 printf("c的地址是:%p\n", &c); 32 33 //由于变量c没有经过初始化,所以直接拿来使用是不对的 34 //int d = c + 1; 35 36 37 printf("c的值是%d\n", c); 38 39 return 0; 40 41 }