C 语言中数组的定义有点丑陋。比如定义一个整型数组变量array,按照一般定义变量的顺序,应该是int[3] array 才对。后来的语言,例如Java 和C#,都支持int[] array 这种写法,希望下一版的C 标准也能支持这种写法,但是目前的标准还不行。定义数组的时候,你只能写成int array[3]这种形式。
对于 C 语言的数组,你需要知道几件事。数组变量array 就是此数组的首地址,它与&array[0]等价;同时array 的地址也不能改变。也就是说,你不能把数组变量array 放到等号的左边,也不能对其运行自增减运算符,如array++和--array 等。
数组的下标从零开始,这一点让初学者有点不适应,不过你只需记住一个口诀,那就是:数组下标从零开始,生活何尝不是如此呢!每当我遇到困难和挫折,我都会默念这个口诀,然后便会充满了正能量。
定义一个数组变量的时候,编译器会根据数组的长度声明一块连续的内存给数组。这块连续内存的外边是什么,谁也不知道。数组本身不会运行越界检查。还记得我们在第3.3.3 节提到的两个C 语言的风格吗?那就是:信任程序员,只要快。你要对得起这份信任,而不是滥用这种信任。记住数组下标从零开始,可以避免一半以上的数组越界错误,另一半就需要细心了。如果定义int array[n];,一个好的避免溢出的方法就是记住遍历这个数组时循环的区间是一个半闭半开的区间[0,n),最好写成for(i = 0;i<n