之不成立),这样原来对数组的处理都可以用指针来实现。如对数组元素的访问,既可以用下标变量访问,也可以用指针访问。2.指向数组元素的指针若有如下定义:i
ta10*papaa则pa0是将数组第1个元素的地址赋给了指针变量p。实际上,C语言中数组名就是数组的首地址,所以第一个元素的地址可以用两种方法获得:pa0或pa。这两种方法在形式上相像,其区别在于:pa是指针变量,a是数组名。值得注意的是:pa是一个可以变化的指针变量,而a是一个常数。因为数组一经被说明,数组的地址也就是固定的,因此a是不能变化的,不允许使用a++、++a或语句a+10,而pa++、++pa、pa+10则是正确的。由此可见,此时指针与数组融为一体。3.指针与一维数组理解指针与一维数组的关系,首先要了解在编译系统中,一维数组的存储组织形式和对数组元素的访问方法。一维数组是一个线形表,它被存放在一片连续的内存单元中。C语言对数组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的
f内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。实际上编译系统将数组元素的形式ai转换成*a+i,然后才进行运算。
对于一般数组元素的形式:数组名下标表达式,编译程序将其转换成:*数组名+下标表达式,其中下标表达式为:下标表达式*扩大因子。整个式子计算结果是一个内存地址,最后的结果为:*地址地址所对应单元的地址的内容。由此可见,C语言对数组的处理,实际上是转换成指针地址的运算。
数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指针。
4.指针与多维数组用指针变量可以指向一维数组,也可以指向多维数组。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。例如,在一个三维数组中,引用元素cijk的地址计算最终将换成:***c+i+j+k。了解了多维数组的存储形式和访问多维数组元素的内部转换公式后,再看当一个指针变量指向多维数组及其元素的情况。1指向数组元素的指针变量若有如下说明:i
ta34i
t*ppap是指向整型变量的指针;pa使p指向整型二维数组a的首地址。**p+1+2表示取a12的内容;*p表示取a01的内容,因为p是指向整型变量的指针;p++表示p的内容加1,即p中存放的r