C语言程序设计课件 :指针.ppt
7.2.2指针的关系运算设p、q是指向同一数据集合的指针变量,则p<q、p<=q、p>q、p>=q、p==q、p!=q是指针变量允许实施的关系运算。它们的意义分别是:(1)p>q:若表达式的结果为非0;则表明p指针变量所指向的元素在q指针变量所指向的元素之后。否则,结果为0,则表明p指向的元素在q指向的元素之前。(2)p<q:若表达的结果为非0,则表明p所指向的元素在q所指向的元素之前。否则,结果为0,则表明p所指向的元素在q所指向的元素之后。图7.7内存……..a[0]a[1]a[3]a[2]a[4]a[5]……...(低地址)(高地址)pq7.2.3指针变量的赋值运算设p,q是指向同一数据类型的指针变量,n为一整数,则:p=q、p=q+n、p=q-n、p+=n,p-=n都是指针变量允许实施的赋值运算。它们的意义分别是:(1)p=q:将q中的地址值赋给p。(2)p=q+n:将由q所指位置向高地址移n个位移量后,所得的实际地址值赋给p。(3)p=q-n:将由q所指位置向低地址移n个位移量后,所得的实际地址值赋给p。(4)p+=n:等价于p=p+n。(5)p-=n:等价于p=p-n。指针变量在进行赋值运算时,要注意:(1)相互赋值的指针变量p、q,它们所指向的变量的类型应一致,否则会出错。(2)如果p+=x中,x低于int类型级别时,应将x强制转换成int类型。如x为double型时,写为:p+=(int)x;(3)指针的赋值运算仅上述列出的形式有意义,其他均无意义。更不能将一个整型变量的值或常数赋给指针变量。即:p=n;p=100;都是错误的。7.2.4指针运算符与自增、自减运算符的混用指针运算符和自增、自减运算符都属于同优先级左结合的单目运算符。它们的混用在程序设计中较为普遍,尤其是指针运算符*与自增运算符++、自减运算符--的混用更为常见。例如:while(*p)putchar(*p++);中的*p++就是指针运算符与自增运算符混用的一种。在这条语句中,*p++的运算结果是:先将*p作为操作数输出,再将指针变量p向高地址自增一个位移量。所以:*p++等价于*p;p+=1;7.3指针与函数参数函数的参数不仅可以是基本类型的变量,也可以是指针变量。对任何必须以地址方式传送的参数,均可以利用指针来实现。特别是函数的返回值多于一个时,可以利用指针来传递函数的返回值。注:当指针作为函数的参数时,对应的实参必须是变量的地址或指针;其相应的形参应是指针变量。这样才能保证地址的正确传送。【例7.5】将指针作为函数参数,改写[例7.2]
的程序。#include〈stdio.h〉swap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}voidmain(){inta,b;int*pa,*pb;scanf(%d,%d,a,b);pa=a;pb=b;if(ab)swap(pa,pb);printf(”\n%d,%d\n,a,b);}程序运行结果如下:8,1818,8#include〈stdio.h〉swap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}voidmain(){inta,b;int*pa,*pb;scanf(%d,%d,a,b);pa=a;pb=b;if(ab)swap(pa,pb);printf(”%d,%d\n,*pa,*pb);}程序运行结果如下:8,188,18#include〈stdio.h〉swap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}voidmain(){inta,b;int*pa,*pb;scanf(%d,%d,a,b);pa=a;pb=b;if(ab)swap(a,b);print