一、什么时候数组与指针相同?
1、从C语言声明和使用考虑。(P200 图9-1)
2、从C语言标准考虑
1)、表达式中的数组名被编译器当作一个指向该数组第一个元素的指针。
2)、数组下标总是与指针的偏移量相同。
3)、在函数参数的声明中,数组名被编译器当作指向该数组第一个元素的指针。
注意:处理一个一维数组时,指针并不见得比数组快。
二、为什么C语言把数组形参当作指针?
1、把作为形参的数组和指针等同起来是出于效率原因的考虑。
2、数组形参是如何被应用的?(206 图9-3)
注意:1)、在被调用的函数中,你只拥有一个指向变量的指针而不是变量指针。
2)、C语言允许程序员把把形参声明为数组或指针。但不论用那一种形式,都要知道指针所指的数组共有多少个元素。如数组一NUL结尾或
另一个附加的参数来表述数组的 范 围。
3)、没有办法把数组本身传递给一个函数,因为它总数被自动转换为指向数组的指针。
4)、数组值得修改只能在指针中进行而无法在数组中进行。
三、数组和指针可交换性的总结
1、数组A[i]这样的形式对数组进行访问总是被编译器改写后解释为像*(a+i)这样的指针访问。
2、指针时钟就是指针。
3、在特定的上下文中,也就是它作为函数的参数(也只有这种情况),一个数组的声明可以看作是一个指针。
4、把一个数组定义为函数的参数时,可以把它定义为数组,也可以定义为指针。
5、在其他所有情况中,声明和定义必须匹配。
四、C语言的多维数组
1、在不用的语言中,多维数组的含义各不相同。
2、C语言中的数组就是一维数组。
3、分解多维数组的方法。(P212 例9-8)
4、内存中数组是如何布局的。(P213 图9-9)
注意:C语言多维数组采用行主序进行内存布局,就是最右边的下标先变化。
5、数组的初始化
1)、只用字符串常量才可以以初始化指针数组。