8.6.2 C语言对数组的处理非常有效吗
除少数翻译器出于谨慎会有一些冗长的规定外,在C语言中数组下标是在一个很低层次上处理的。但这个优点也有一个反作用,即在程序运行时你无法知道一个数组到底有多大,或者一个数组下标是否有效。ANSI/ISO C标准没有对使用越界下标的行为给出定义,因此,一个越界下标有可能导致如下所示的后果。
❑ 程序仍能正确运行。
❑ 程序会异常终止或崩溃。
❑ 程序能继续运行,但无法得出正确的结果。
❑ 其他情况。
换句话说,你不知道程序此后会有什么反应,这会带来很大的麻烦。有些人就是抓住这一点来批评C语言的,认为C语言只不过是一种高级的汇编语言。然而,尽管C程序出错时的表现有些可怕,但谁也不能否认一个经过仔细编写和调试的C程序运行起来是非常快的。
数组和指针能非常和谐地在一起工作。当数组出现在一个表达式中时,它和指向数组中第1个元素的指针是等价的,因此数组和指针几乎可以互换使用。此外,使用指针要比使用数组下标快两倍。
将数组作为参数传递给函数和将指向数组中第1个元素的指针传递给函数是完全等价的。将数组作为参数传递给函数时可以采用值传递和地址传递两种方式,前者需要完整地复制初始数组,但这比较安全;后者的速度要快得多,但编写程序时要多加小心。在C++和ANSI C中都有const关键字,利用它可以使地址传递方式和值传递方式一样安全。