如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第十章指针指针简介内存单元的地址称为指针。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。定义指针的目的是为了通过指针去访问内存单元。设有字符变量C,其内容为“K”,C占用了011A号单元(地址用十六进数表示)。设有指针变量P,内容为011A,这种情况我们称为P指向变量C,或说P是指向变量C的指针。指针变量的定义int*p1;p1是一个指针变量,它的值是某个整型变量的地址。或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量,应由向p1赋予的地址来决定。staticint*p2;/*p2是指向静态整型变量的指针变量*/float*p3;/*p3是指向浮点变量的指针变量*/char*p4;/*p4是指向字符变量的指针变量*/指针变量的赋值设有指向整型变量的指针变量p,如要把整型变量a的地址赋予p,可以有以下两种方式:指针变量初始化的方法inta;int*p=&a;赋值语句的方法inta;int*p;p=&a;不允许把一个数赋予指针变量,故下面的赋值是错误的:int*p;p=1000;被赋值的指针变量前不能再加“*”说明符,如写为*p=&a也是错误的指针变量的运算需要注意的是指针运算符*和指针变量说明中的指针说明符*不是一回事。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。指针变量的赋值运算把数组的首地址赋予指向数组的指针变量。例如:inta[5],*pa;pa=a;或inta[5],*pa;pa=&a[0];或inta[5],*pa=a;把字符串的首地址赋予指向字符类型的指针变量。例如:char*pc;pc="clanguage";或char*pc="CLanguage";把存放该字符串的字符数组的首地址装入指针变量。指针变量的加减算术运算指针变量的加减运算只能对数组指针变量进行。对指向其它类型变量的指针变量作加减运算毫无意义。两个指针变量之间的运算只有指向同一数组的两个指针变量之间才能进行,否则运算毫无意义。两指针变量相减两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针值(地址)相减之差再除以该数组元素的长度(字节数)。两个指针变量不能进行加法运算。两指针变量进行关系运算指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的关系。例如:pf1==pf2表示pf1和pf2指向同一数组元素pf1>pf2表示pf1处于高地址位置pf1<pf2表示pf2处于低地址位置main(){inta=10,b=20,s,t,*pa,*pb;pa=&a;pb=&b;s=*pa+*pb;t=*pa**pb;printf("a=%d\nb=%d\na+b=%d\na*b=%d\n",a,b,a+b,a*b);printf("s=%d\nt=%d\n",s,t);}main(){inta,b,c,*pmax,*pmin;printf("inputthreenumbers:\n");scanf("%d%d%d",&a,&b,&c);if(a>b){pmax=&a;pmin=&b;}else{pmax=&b;pmin=&a;}if(c>*pmax)pmax=&c;if(c<*pmin)pmin=&c;printf("max=%d\nmin=%d\n",*pmax,*pmin);}指针变量作函数参数floataver(float*pa){inti;floatav,s=0;for(i=0;i<5;i++)s=s+*pa++;av=s/5;returnav;}main(){floatsco[5],av,*sp;inti;sp=sco;printf("\ninput5scores:\n");for(i=0;i<5;i++)scanf("%f",&sco[i]);av=aver(sp);printf("averagescoreis%5.2f",av);}swap(intx,inty){intt;t=x;x=y;y=t;}main(){inta=10,b=20;swap(a,b);printf(“a=%db=%d\n”,a,b);}swap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}main(){inta=10,b=20,*pa,*pb;*pa=&a;*pb=&b;swap(pa,pb);printf(“a=%db=%d\n”,a,b);}