在大多数表达式中,数组名的值是指向数组第一个元素的指针。但sizeof返回整个数组所占用的字节数,而不是一个指针所占用的字节数。单目操作符&返回一个指向数组的指针,而不是一个指向数组第一个元素的指针的指针。除了优先级不同外,下标表达式array[value]和间接访问表达式*(arrray+(value))是一样的,因此下标可以用于数组名,也可用于指针表达式中。但是用于指针表达式中编译器将很难检查下标的有效性。另外指针表达式可能比下标表达式效率更高,但下标表达式不可能比指针表达式效率更高。
指针和数组并不相等,当我们声明一个数组时,他同时也分配了用于存放数组元素的空间。但是当声明一个指针时,他只分配了用于容纳指针本身的空间。
当数组名作为参数传递时,实际传递给函数的是一个指向数组第一个元素的指针,函数所接收到的参数实际是原参数的一份拷贝,所以函数可以对其操纵但不会影响实际的参数。但对指针参数执行间接访问操作允许函数修改原先数组元素。
多维数组实际上是一维数组的一种特型,他的每个元素本身也是一个数组。多维数组名的值是一个指向他第一个元素的指针,也就是指向数组的指针。对该指针进行运算将根据他所指向数组的长度对操作数进行调整。多维数组的下标引用也是在指针表达式。当一个多维数组名作为参数传递给一个函数时,他所对应的函数行参声明中必须显式指明第二维(和接下去所有维)的长度。多维数组实际是复杂元素的一维数组,一个多维数组的初始化列表就包含了这些复杂元素的值。如果多维数组的初始化列表是完整的,他的内层花括号可以省略。在多维数组的初始值列表中只有第一维的长度可以自动计算出来。
我们还可以创建指针数组。字符串的列表可以以矩阵的形式存储,也可以以指向字符串常量的指针数组形式存储。在矩阵中,每行必须与最长字符串的长度一样长,但他不需要任何指针。指针数组本身要占用空间,但每个指针所指向的字符串所占用的空间就是字符串本身的长度。
阅读(829) | 评论(0) | 转发(0) |