1.用a[i]这样的形式对数组进行访问总是被编译器“改写”或解释为像*(a+1)这样的指针访问。
2.指针始终就是指针。它绝不可以改写成数组。你可以用下标形式访问指针,一般都是指针作为函数参数时,而且你知道实际传递给函数的是一-个数组。
3.在特定的上下文中,也就是它作为函数的参数(也只有这种情况),一个数组的声明可以看作是一个指针。 作为函数参数的数组(就是在一个函数调用中) 始终会被编译器修改成为指向数组第一个 元素的指针。
4.因此,当把一个数组定义为函数的参数时,可以选择把它定义为数组,也可以定义指针。不管选择哪种方法,在函数内部事实上获得的都是一个指针。因为如果要拷贝整个数组,无论在在时间上还是在空间上开销都可能非常大,而且在绝大多数情况下,并不需要拷贝整个数组。
5.在其他所有情况中,定义和声明必须匹配。如果定义了一个数组,在其他文件对它进行声明时也必须把它声明为数组,指针也是如此。 (摘自《C专家编程》p209)
C/C++ 禁止在函数调用时直接传递数组的内容,而是强制传递数组指针。而对于结构体和对象没有这种限制,调用函数时既可以传递指针,也可以直接传递内容;为了提高效率,专家曾建议传递指针,这样做在大部分情况下并没有什么不妥。