深入学习C语言数组
阅读目录:
1、多角度理解数组
2、数组中几个关键符号
3、从内存角度理解指针访问数组的实质
4、指针与数组的类型匹配问题
1、多角度理解数组:
1.1、从内存角度理解数组
(1)从内存角度讲,数组变量就是一次分配多个变量,而且这多个变量在内存中的存储单元是依次相连接的。
(2)我们分开定义多个变量(譬如int a, b, c, d;)和一次定义一个数组(int a[4]);这两种定义方法相同点是都定义了4个int型变量,而且这4个变量都是独立的单个使用的;不同点是单独定义时a、b、c、d在内存中的地址不一定相连,但是定义成数组后,数组中的4个元素地址肯定是依次相连的。
(3)数组中多个变量虽然必须单独访问,但是因为他们的地址彼此相连,因此很适合用指针来操作,因此数组和指针天生就叫纠结在一起。
int a, b, c, d; // 分开独立定义4个int型变量
int a[4]; // 一次定义一个数组,包含4个int型变量
// 注意数组和指针在初始化时的式子,和平时赋值有不同。
int a[10] = {
1, 3, 4, 0}; // 定义同时初始化
int *p = &a; // 定义同时初始化
a[0] = 4;
a[1] = 44;
a = {
1, 4, 5, 32}; // 错误的,数组元素必须单个访问,不能整个数组来访问
1.2、从编译器角度来理解数组
(1)从编译器角度来讲,数组变量也是变量,和普通变量和指针变量并没有本质不同。变量的本质就是一个地址,这个地址在编译器中决定具体数值,具体数值和变量名绑定,变量类型决定这个地址的延续长度(整形4字节、字符型1字节)。
(2)搞清楚:变量、变量名、变量类型的具体含义
2、数组中几个关键符号(a a[0] &a &a[0]):
这4个符号搞清楚了,数组相关的很多问题都有答案了。理解这些符号的时候要和左值右值结合起来,也就是搞清楚每个符号分别做左值和右值时的不同含义。
int a[5] = {<