资源描述:
《c语言_ch08_6_指针数组与多重指针 动态内存分配》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2021/6/121上一节我们学到了函数指针和指针函数2021/6/122第8章善于利用指针8.1指针是什么8.2指针变量8.3通过指针引用数组8.4通过指针引用字符串8.4.1字符串的引用方式8.4.2字符指针作函数参数8.4.3使用字符指针变量和字符数组的比较8.5指向函数的指针8.6返回指针值的函数8.7指针数组和多重指针8.8动态内存分配与指向它的指针变量8.9有关指针的小结本节内容指针数组pointerarray多重指针int**带参的main动态内存分配void*的引用和赋值野指针(悬挂指针)与指针相关的编程规则2021/6/124指
2、针数组指针数组指针组成的数组例如:int*p[4]由于[]比*优先级高,因此p首先与[]结合,即p是数组,4个元素分别为p[0]、p[1]、p[2]、p[3]。数组每个元素的类型是int*。2021/6/125指针数组举例例如,图书馆有若干本书(图a),要求对这些书目进行排序和查询。表示多个字符串的两种数据结构二维字符数组,图bcharnames[5][50];缺点,空间复杂度字符指针数组,图cchar*names[50];#includeintmain(){inti;char*arr[4]={"C","C++","Java",
3、"VBA"};for(i=0;i<4;i++)printf("AddressofString%d:%u",i+1,arr[i]);return0;}VBA Java C++ C 03C04304204104003F03E03D04404B04A04904804704604504F04E04D04C0x0042204C0x004220480x004220400x0042203C2021/6/127arrchar*arr[4]={"C","C++","Java","VBA"};C C++ VBA Java 20
4、21/6/129例8.27将若干字符串按字母顺序(由小到大)输出。#include#includevoidsort(char*names[],intn);voidprint(char*names[],intn);intmain(){char*names[]={"Followme","BASIC","GreatWall","FORTRAN","ComputerDesign"};intn=sizeof(names)/sizeof(names[0]);sort(names,n);print(names,n);}2
5、021/6/1210voidsort(char*names[],intn)//选择法排序{char*temp;inti,j,k;for(i=0;i0)k=j;}if(k!=i){temp=names[i];names[i]=names[k];names[k]=temp;}}}2021/6/1211voidprint(char*names[],intn){inti;for(i=0;i6、)printf("%s",names[i]);}运行结果为:BASICComputerDesignFORTRANFollowmeGreatWall2021/6/12128.7.2指向指针的指针指向指针数据的指针变量,简称为指向指针的指针。2021/6/1213指向指针的指针的定义char**p;*运算符的结合性是从右到左,因此**p相当于*(*p)(*p)前面部分是char*,表明p是指向char*(即一个字符指针变量)的指针变量。2021/6/1214*p就是p所指向的那个指针变量,例p=name+2;printf("%x",*p);p
7、rintf("%s",*p);2021/6/1215例8.28使用指向指针的指针输出各字符串。intmain(){char*name[]={"Followme","BASIC","GreatWall","FORTRAN","ComputerDesign"};char**p;inti;for(i=0;i<5;i++){p=name+i;printf("%s",*p);}}2021/6/1216例8.29一个指针数组的元素指向整型数据的简单例子intmain(){inta[5]={1,3,5,7,9};int*num[5]={&a[0],&a
8、[1],&a[2],&a[3],&a[4]};int**p,i;p=num;for(i=0;i<5;i++){printf("%dt"