欢迎来到天天文库
浏览记录
ID:51976098
大小:89.50 KB
页数:39页
时间:2020-03-26
《张乃孝全套配套课件算法与数据结构 C语言中的指针.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言中的指针与函数A指针一个指针是一个特殊变量,它的值是另一个变量的地址。除寄存器(register)变量外,所有的变量均有地址。地址是变量在内存中存放的位置。在声明一个指针变量时,我们在变量名字前加一个星号*。A.1指向变量的指针声明字符型变量a和指向字符型的指针变量p:chara='b';char*p;此处的p是指针变量,p前面的*用来声明p为一个指针,即p是存放一个变量地址的变量,p指向的变量是字符型的,即p存放字符型变量的地址。指针变量p在初始化之前,它的当前值是不定的,语句p=&a;是将字符变量a的地址赋给指向字符型的指针变量p,符号&在这里
2、作为一元运算符,是地址运算符,&a是求变量a的地址。上述语句执行后,在p内存放a的地址,重要的是p与a的类型要匹配。用*p表示指针p所指的对象,即先取出p中的值,得一个地址,再通过此地址得到需要的对象,因此下面的两个语句输出同样的结果’b’:printf("ais%c",a);printf("ais%c",*p);我们可用变量的名字a,也可用指向变量a的指针变量p。这样,要将a内的原有值'b'改成'd',可直接将'd'赋给变量a,也可间接地使用指针变量p,其程序片段为:p=&a;/*初始化p*/a='d';/*将'd'直接赋给a*/*p='d';
3、/*通过指针变量p将'd'赋给a*/先讨论指向数组元素的指针。用下面语句声明一个字符型数组和一个指向字符型变量的指针:charline[100],*p;可用下面的语句给line的前两个元素赋值:line[0]='a';line[1]='b';也可用指针,先对p初始化使其指向数组line的首址:p=&line[0];/*第0个元素的地址*/或直接写成:p=line;/*数组名字是数组的首址*/A.2指向数组的指针然后可用下面两个语句给数组的前两个元素赋值:*p='a';*(p+1)='b';对于每个赋值,编译程序将首先计算元素的地址:数组名字line即是数
4、组的首地址,line加上增量0,line加上增量1,分别是前两个元素的地址。连续执行下面两个语句*p++='a';*p++='b';/*运算符*与++的优先级相同,结合方向是“从右到左”*p++即*(p++)*/指针p将两次增1,最终指向line[2]的地址。假设有整型数组和指向整型量的指针:intnum[10],*q=num;q指向num[0]的地址,当q增1时,q指向num[1]的地址,要移动2个或4个字节(依赖于不同的计算机);而指向字符型的指针增1时,只移动一个字节,这就是指针变量与其指向的变量的类型必须要匹配的道理。若两个指针指向同一数组,这两
5、个指针也可以做比较运算。以上讨论的是指向数组元素的指针,下面再简单介绍指向一维数组的指针:inta[3][4],(*pa)[4];pa=a;第一行声明的pa是一个指针,指向有4个元素的一维整型数组;第二行通过对pa赋值,使得pa等于a[0][0]的地址,pa+1要后移4个整数,即pa+1指向a[1][0]的地址,*(pa+1)+3指向a[1][3]的地址,*(*(pa+2)+1)是a[2][1]的值。也可建立一个指针数组,它的每个元素均是一个指针,存放地址,下面的语句char*ap[3];声明ap是一个指向字符型的指针数组,ap的每个元素存放一个字符串的
6、首址。A.3指针数组若我们用内存动态存储区分配函数分配每个字符串的空间:ap[i]=(char*)malloc(sizeof(字符串));则ap[i]指向分配的相应字符串区域的首址。例如:ap[0]存放"science"的首址ap[1]存放"technology"的首址ap[2]存放"art"的首址可以如下表示:ap[0]=(char*)malloc(sizeof("science"));ap[1]=(char*)malloc(sizeof("techonology"));ap[2]=(char*)malloc(sizeof("art"));A.4指向结
7、构的指针可定义一个结构数组,然后用指针指向此数组的第一个元素,这等同于我们以前讨论的指向数组元素的指针。例如:structexp/*定义结构exp*/{charc;inti;};structexpae[10],*p;/*定义结构数组ae和指向结构的指针p*/p=ae;/*使p指向数组的首址,即ae[0]的地址*/p->c='a';/*元素ae[0]的成员c为'a'*/p->i=0;/*元素ae[0]的成员i为0*/p++;/*使p指向ae[1]*/p->c='b';/*元素ae[1]的成员c为'b'*/当p是指向结构的指针时,运算符->是成员运算符,p-
8、>c等价于(*p).c一个结构中的成员也可以是一个指针,此指针可指向同种类型的另
此文档下载收益归作者所有