C语言程序设计第9指针进阶
第9章 指针进阶 学习目标 1.掌握指针数组的定义及其应用,了解二级指针的基本概念; 2. 理解二维数组的指针和指向二维数组的指针变量; 3. 了解指向函数的指针,理解指针型函数; 4. 初步了解内存的动态分配和动态回收; 5. 初步掌握单向链表的建立与访问、在单向链表中插入、删除结点等算法。 9.1 指针数组 9.1.1 指针数组的概念 指针数组:一个数组的每个元素均为指针类型 形式: 数据类型 *数组名[数组长度]; int *pa[3]; char *pname[5]= {"JiangSu","ShanDong","ZheJiang","GuangXi","AnHui"}; 9.1.2 指向指针的指针变量 指向指针的指针变量:一个指针变量中存放的是另一个指针变量的地址 形式: 数据类型 **指针变量名; int **p; int x=5,*q=&x; int **p; p=&q; #include void main() { int a=10,*b,**c; b=&a; c=&b; printf("%d,%d,%d\n",a,*b,**c); *b=20; /* 通过b间接访问a */ printf("%d,%d,%d\n",a,*b,**c); **c=30; /* 通过c间接访问a */ printf("%d,%d,%d\n",a,*b,**c); } 运行结果: 10,10,10 20,20,20 30,30,30 9.1.3 指针数组应用举例 编程将若干字符串按字母顺序由小到大排序后输出。 #include #include #define N 5 /* 字符串个数 */ void sort(char **name,int n); void print(char *name[],int n); void main() { char *pname[N]={"JiangSu","ShanDong","ZheJiang","GuangXi","AnHui"}; printf("before sorted:\n"); print(pname,N); /* 排序前输出各字符串 */ sort(pname,N); /* 排序 */ printf("after sorted:\n"); print(pname,N); /* 排序后输出各字符串 */ } void sort(char *name[],int n) { char *pt; int i,j,k; for(i=0;i0) k=j; if(k!=i) { pt=name[i]; name[i]=name[k]; name[k]=pt; } } } void print(char **name,int n) { int i; for(i=0;i