在很多C++的入门书籍里,在介绍数组的时候,都会提到,数组名可以看成一个常量指针。这句话本身问题并不大,但是由于没有对指针与数组区别的深入解释,会使一些人不能正确了解数组与指针的联系与不同。这里对数组与指针的不同做一点简单的介绍。
什么是数组,什么是指针
首先要明确的是,数组与指针的概念。数组和指针是C++中的两种不同的数据类型。数组指的是在一片连续的内存空间中存储的N个相同类型的对象(object,C++标准中,内存中任何数据都可以被称做object,比如整数,类),而指针则是一个对象的地址。
array-to-pointer conversion
从 数组与指针的概念来看,他们应该是很不相同的,但为什么数组名可以看成一个常量指针呢,这要是因为在C++中,数组不能做为绝大多数操作符 (operator)的操作对象。当数组类型的变量出现在表达式中时,它几乎总是被通过自动类型转换转换指针类型(array-to-pointer conversion),这个指针指向数组的第一个成员。由于这个指针是由自动类型转换生成的,是一个临时变量,因而不能被赋值,这使它表现得像一个常 量。于是,“数组名可以看成一个常量指针”。
事实上,只要数组变量被求值,它就一定会转换成指针。这使得大多数情况下数组可以直接被当成一个指针使用。同时,这种转换也会发生在一些“意想不到”的情况下。
函数的参数
C++的参数是按值传递的,当数组出现在函数参数的位置时,就需要对它求值,从而使它被转换成一个指针。这就决定了,数组不能成为函数的参数。
但是我们知道&#