文档详情

第8章_指针3.ppt

发布:2017-06-15约9.36千字共44页下载文档
文本预览下载声明
指针汇总: int *p; char *p; int **p; char *p[] char (*p)[4] int (*p)(int,int) int *p(int,int) 作业: 分析、理解第八章例题 例8.24 将若干字符串按字母顺序(由小到大)输出。 #include stdio.h #include string.h void main() {void sort(char *name[ ],int n); void print(char *name[ ],int n); char *name[ ]={Follow me,BASIC,Great Wall,FORTRAN,Computer design}; int n=5; sort(name,n); print(name,n); } void sort(char *name[ ],int n) {char *temp; int i,j,k; for(i=0;in-1;i++) {k=i; for(j=i+1;jn;j++) if(strcmp(name[k],name[j])0) k=j; if(k!=i) {temp=name[i]; name[i]=name[k]; name[k]=temp; } } } void print(char *name[ ],int n) {int i; for(i=0;in;i++) printf(%s\n,name[i]); } 8.7.2 指向指针数据的指针 定义一个指向指针数据的指针变量: char**p; 例8.25 使用指向指针数据的指针变量 #include stdio.h void main() {char *name[]={Follow me,BASIC,Great Wall,FORTRAN,Computer design}; char **p; int i; for(i=0;i5;i++) {p=name+i; printf(%s\n,*p); } } 例8.26 一个指针数组的元素指向整型数据的简单例子 #include stdio.h void main() {int a[5]={1,3,5,7,9}; int *num[5]={a[0],a[1],a[2],a[3],a[4]}; int **p,i; p=num; for(i=0;i5;i++) {printf(%d ,**p); p++; } printf(\n); } 8.8 动态内存分配与指向它的指针变量 8.8.1 什么是内存的动态分配 前面介绍过全局变量和局部变量,全局变量是分配在内存中的静态存储区的,非静态的局部变量(包括形参)是分配在内存中的动态存储区的,这个存储区是一个称为栈(stack)的区域。除此以外,C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据是临时存放在一个的特别的自由存储区,称为堆(heap)区。 8.8.2 怎样建立内存的动态分配   对内存的动态分配是通过系统提供的库函数来实现的,主要有以下4个函数: (1) malloc 函数原型为 void *malloc(unsigned int size); 作用是在内存的动态存储区中分配一个长度为size的连续空间。 (2) calloc函数 函数原型为 void *calloc(unsigned n,unsigned size ); 作用是在内存的动态存储区中分配n个长度为size的连续空间。 8.8.2 怎样建立内存的动态分配 (3) free函数 函数原型为 void free(void *p); 作用是释放由指针变量p指向的动态空间,使这部分空间能被其他变量使用。 (4) realloc函数 函数原型为 void *realloc(void *p,unsigned int size); 如果已经通过malloc函数或calloc函数获得了临时分配域,想改变函数其大小,可以用recalloc函数重分配。 例8.27 建立动态数组,输入5个学生的成绩,另外用一个 函数检查其中有无低于60分的,输出不合格的成绩。 #include stdio.h #include stdlib.h void main() { void check(int *); int *p1,i; void *p
显示全部
相似文档