说明:本文主要讨论一维数组,适宜程度:对C语言初步认识及想深入学习者
1、从编译器角度理解数组
从编译器角度理解来讲,数组也是一个变量,和普通的变量没有本质的区别。变量的本质指的是一段内存空间,编译器在编译的时候,会将一个变量名和这段内存空间的第一个字节地址绑定,变量的类型决定了这段内存空间的字节数。当我们希望访问的这段内存空间的时候,一个方法就是利用变量名访问,但是变量名会受到作用域的限制,还有另外一种发法就是直接使用地址访问,并且不会受到作用域的限制。数组的定义一样遵循这样的原理。
2、从内存角度理解数组
站在内存角度,比如定义一个数组int buf[100]=(0),相当于一次性定义了100个int 类型的变量,每个变量空间4个字节。不同的是,这100个变量的内存空间是依次连续的。不仅方便定义,也方便访问。
但是如果我们采用int va0 val,va2,…va99的方式来定义的话,虽然都是 100个变量空间,但是定义繁琐,而且元素空间不一定连续,只能单个访问。虽然数组中的每个元素也必须逐个访问,但是由于这些空间连续地排列在一起,所以使用指针进行操作非常方便。实际上数组就是高效利用指针的典型例子, 如果想对指针有深刻的理解,就必须对数组有深刻的认识。
3、一维数组中几个关键符号的理解
下面以int buf[100] = {0};为例,集中讨论buf、buf[0]、&buf[0]和&buf这四个符号的内涵。
buf:
有两层含义,一是数组名,sizeof(b