在C中,在几乎所有使用数组名的表达式中,数组名的值是个指针常量,也就是数组第1个元素的地址。它的类型取决于数组元素的类型:如果它们是int类型,那么数组名的类型就是“指向int的常量指针”;如果它们是其他类型,那么数组名的类型就是“指向其他类型的常量指针”。注意这个值是指针常量,而不是指针变量,不能修改常量的值。只有在两种场合下,数组名并不用指针常量来表示——就是当数组名作为sizeof操作符或单目操作符&的操作数时。sizeof返回整个数组的长度,而不是指向数组的指针的长度。取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量值的指针。
指针和数组并不是相等。
数组的初始化:数组的初始化需要一系列的值。这些值位于一对花括号中,每个值之间用逗号分隔。如果数组未被初始化,数组元素的初始值将会自动设置为零。
在C中,多维数组的元素的存储顺序按照最右边的下标率先变化的原则,称为行主序。
下标:要标识一个多维数组的某个元素,必须按照与数组声明时相同的顺序为每一维提供一个下标,而且每个下标的都单独位于一对方括内。下标引用实际上只是间接访问表达式的一种伪装形式,即使在多为数组中也是如此。
指向数组的指针(即指针数组):int(*p)[数组长度]
作为函数参数的多维数组:与一维数组相同,但是两者之间的区别在于多维数组的每个元素本身是另外一个数组,编译器需要知道它的维数,以便为函数形参的下标表达式进行求值。
数组长度自动计算:多维数组中,只有第1维才能根据初始化列表缺省地提供。剩余的几个维必须显式地写出,这样编译器就能推断出每个子数组维数的长度。
如上所示:前者初始化一个字符数组的元素,而后者则是一个真正的字符串常量。这个指针变量初始化为指向这个字符串常量的存储位置。如下所示: