内容正文:
第9章
指针的应用
本章主要内容
1、指针与数组
2、字符串的指针和指向字符串的指针变量
3、指针数组
4、指向指针的指针
5、函数指针
6、返回指针的函数
7、main()函数的返回指和参数
9.1一维数组与指针
●
C语言规定数组名代表数组的起始地址,一个数组包含若
干个元素,每个数组元素都在内存中占用存储空间,都有
相应的地址,指针变量可以指向数组或数组元素。
9.1.1数组名的特殊意义及其在访问数组元素中的作用
#include"stdio.h"
#include"stdio.h"
int main()
int main()
{
数组元素的引
{
int a[5],i;
int a[5],i;
for(i=0,i<5;i++)》
for(i=0:i<5,i++)
{
a或&al0]
{
scanf("%d",&a[aa山
al01或*(a+0)
scanf("%d",a
a1川或*(a+1)
}
for(i=0;,i<5;i++)》
a+2或&a2]
for(i=0;i<5,i++))
a2或*(a+2)
a+3或&a3]
printf("%3d",ai]);
a3]或*(a+3)
printf("%3d"
}
a+4或&a41
a4或*(a+4)
printf("
");
printf("In");
return 0;
return 0;
}
9.1.2数组元素的指针其作用是将指针变量即指向数组元素的
首地址,其指向关系如图9-2(b)所示
int a[5],*p;
p=&a[0]:
p&a[0]
a[0]
a[o]
a
a
al21
a[2]
a31
a[3]
a[4]
a[4]
)
(b)
p=&a[0];等价于
p=a,
9.1.3指针变量运算
指针变量的运算是指指针变量所持有的地址为运算对象进
行的运算,所以指针变量的运算实际上就是地址的运算。
指针的运算常常是针对数组元素的,因为数组在内存
中是连续存放的,所以指向同一数组中不同元素的两个指针
的关系运算常用于比较它们所指元素在数组的前后位置关系
。指针的算术运算(增1或减1)则常用来移动指针的指向
使其指向数组中的其他元素。这里强调只有运算结果仍指
向同一数组中的元素时,指针运算才有意义。
a可10]*p.*q
p=&a[2]:+
此时,指针指向如右图说是所示。
指针p加上整数j将产生指向特楚心素的增4这个特定元繁原
来指向的元素后的第个位置
此时,表示在p当前指向的情况
下,向后偏移3个元素的位置就是q所
指向的存储空间。和
a0a1】a2】a3a4]a5]a6a7]a[8a9]
p+=6:
此时,表示在p当前指向的情况下,
向后偏移6个元素的位置,就是偏移后
p所指向的存储空间,q的指向不变。
a01】a2]a3]a41a5a6a7]8a[9
图93指针加上一个整数的运算示意图
ta[10]*p.*q
p=&a[8]w
此时,指针指向如右图说是所示。?
a01)a2a3】a[4]a5a6a7]8a9y
Q-p-3:
此时,表示在p当前指向的情况下,
向前偏移3个元素的位置就是q所指向
的存储空间。
a0]a刂2】a3Ja41a5a6af7】a8]a9]
p-=6;w
此时,表示在p当前指向的情况
下,向前偏移6个元素的位置,就是偏
移后p所指向的存储空间,q的指向不
变。
ao]a1」[2】a3)a4]a5】a6a[7Ja8)a9
图94指针减去一个整数的运算示意图:
3、两个指针相减
当两个指针相减的时候,结果为两个指针之间的
距离,用数组元素的个数来表示。因此,如果p指向
a[且q指向a],则p-q就等于ij。
处a[10,i*p,*q
p=&a[]
q=&a[1
i=p-q:+
i的结果为它们所指存储空间索引
a0]1]a2]a[3]a[4a5]a[6a7]a81a9]
差的值4.3
4、指针的比较
可以用关系运算符(<、<=、>、>=)和判断运算符
(
==和!=)进行指针的比较运算,只有在两个指针指向同一数
组时,用关系运算符进行的指针比较才有意义。比较的结果
依赖于数组中两个元素的相对位置。
例如:
inta[10],*p,*q;
p=&a[5];
q=a[1];
p<=q的指位0,而p>=q的结果为1。