资源描述:
《指针以及高级使用.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、指针学好C语言的关键浙江大学CAD&CG国家重点实验室杨旸课程要点复习指针的定义与运算重温指针的经典问题:swap()函数问题动态存储管理字符串与字符指针的应用多维数组与指针函数指针指针的概念指针(pointer):是一个变量的地址。指针变量:是一个变量,其值是另一个变量的地址。任何变量都在计算机内存中占有一块内存区域,变量的值就存放在这块内存区域之中。课堂练习打印出数组inta[7]={1,3,0,-1,9,8,6};中的最大值和最小值。(用指针实现)#includeintmain(){int
2、a[7]={1,3,0,-1,9,8,6};int*max,*min,*p;//定义了三个指针变量p=max=min=a;for(;p*max)max=p;if(*p<*min)min=p;//更新了max和min的值}printf("themaxis:%d",*max);printf("theminis:%d",*min);return0;}指针变量的定义-小结inti;int*pinta[n]int*p[n]int(*p)[n]intf();int
3、*p()int(*p)()int**p指针的数据类型的小结inti;整型变量int*pP为指向整型数据的指针变量inta[n]数组aint*p[n]指针数组p,它由n个指向整型数据的指针元素组成int(*p)[n]P为指向含n个元素的一维数组的指针变量intf();f为带回整型函数值的函数int*p()P为带回一个指针的函数int(*p)()P为指向指针的函数int**pP是一个指针变量,它指向一个指向整型数据的指针变量,二级指针指针的数据类型进阶Float(**def)[10]Double*(*gf)[10]D
4、ouble(*f[10])()Int*((*b)[10])Long(*fun)(int)指针的数据类型进阶Float(**def)[10]def是一个二级指针,指向float的数组Double*(*gf)[10]Gh是指针,指向一个元素均为double*的一维数组Double(*f[10])()F为数组,数组元素为函数指针,指向的是没有行参的double的函数Int*((*b)[10])与2类似,b是指针,指向一个元素均为int*的一维数组Long(*fun)(int)函数指针指针基本运算小结1指针加(减)一个整
5、数p++,p--,p+i,p-i.p+i代表地址运算为p+c*I如果数组元素是整型,p+1表示p的地址加4;如果数组元素是double型,p+1表示p的地址加8;如果数组元素是字符型,p+1表示p的地址加1。p+i指向元素a[i]。可以使用*(p+i)访问元素a[i]。课堂练习请问下面程序的执行结果?voidmain(){inta[][4]={1,3,5,7,9,11,13,15,17,19,21,23};int(*p)[4];p=a;printf(“%d”,*(*p+2));printf(“%d”,*(
6、*(p+2));printf(“%d”,**p+2);}1357911131517192123p*(p+2)*p+2指针基本运算小结2指针变量与自加自减操作符的结合运算*(p++):先取*p,再使p加1。*(++p):先使p加1,再取*p。(*p)++表示,p指向的元素值加1。如果p当前指向数组a的第i个元素,则:*(p--)相当于a[i--],先取*p,再使p减1。*(++p)相当于a[++i],先使p加1,再取*p。*(--p)相当于a[--i],先使p减1,再取*p。课堂练习请问下面程序的输出结果是?#
7、includemain(){intb=3;intarr[]={6,7,8,9,10};int*ptr=arr;*(ptr++)+=123;printf(“%d,%d”,*ptr,*(++ptr));}a.88b.1308c.77d.78Swap()函数经典问题函数参数包括实参和形参,两者的类型要一致,可以是指针类型。如果实参是某个变量的地址,相应的形参就是指针。intmain(void){inta=1,b=2;int*pa=&a,*pb=&b;voidswap1(intx,inty),swa
8、p2(int*px,int*py),swap3(int*px,int*py);swap1(a,b);printf(“Aftercallingswap1:a=%db=%d”,a,b);a=1;b=2;swap2(pa,pb);printf(“Aftercallingswap2:a=%db=%d”,a,b);a=1;b=2;swap3(pa,pb);printf(“A