指向数组的指针是指这个指针指向数组的起始地址。定义方式与指向变量的指针的定义方式相同。例如:
注意:
①指向数组的指针的类型应该与数组的类型一致。
②数组名代表数组的起始地址,是一个常量。也就是数组的第一个元素的地址。
●依据上面的例子,下面的两条语句等价:
●依据上面的例子,下面的两条语句不等价:
③如果p指向a数组中的某一个元素,则p+1就指向该元素的下一个元素。
④如果p指向a数组的起始地址,则
●p+i与a+i均表示数组元素a[i]的地址。
●*(p+i)与*(a+i)均表示p+i与a+i所指向的数组元素a[i]的值。
⑤对指向数组(字符串)的指针变量可以进行指针的算术运算,如指针自增、自减运算,指针与整数的加减运算,目的使指针在数组(字符串)的各元素间移动。对指向同一数组的两个指针变量可以做减法运算。(www.xing528.com)
例6-3 通过指针变量实现输入/输出数组的全部元素值。
参考程序:
程序运行时,从键盘给数组a的元素随机赋值,运行结果如图6-6所示。
图6-6 程序运行结果
这个程序代码是循环执行p++这样的指针变量自增操作来实现对数组各元素的访问。因为每执行一次p++操作,指针p将修改为指向下一个数组元素。这种方式的缺点是通过指针变量p的当前值引用数组元素时并不能直接判断出该元素是数组中的第几个元素。
代码中的第二个for语句的循环控制条件p<a+10值得特别说明一下。虽然地址表达式a+10的值已经超出了数组a的上界,但是将指针p的值与地址a+10进行关系运算是安全的,因为循环不会检查地址a+10指向的存储单元。第二个for语句也可以该写成如下两种形式:
*p++是一种常见的紧凑表达式,在计算该表达式时,由于运算符*和++的优先级相同,但结合性是从右向左,因此,*p++等价于*(p++)。
C语言程序员经常在处理数组元素的语句中组合*运算符和++运算符。例如,表达式(*p)++,表示返回p指向的对象的值,然后对象进行自增,但p本身是不变化的。这两种运算符的组合有时容易让人混淆,表6-1给出了两者常用组合情况的一些总结。
表6-1 几种*运算符和++运算符的组合
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。