重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第16讲 动态内存分配&结构体

第16讲 动态内存分配 结构体
第16讲 动态内存分配 结构体

学习方法 ■读程序:上机单步执行(跟踪法)观察 程序的执行顺序以及程序中各变量的值 的变化。或者人工模拟计算机执行,要 手工进行计算。 写程序:先逐层地写算法!再写程序!
2 学习方法 ▪ 读程序:上机单步执行(跟踪法)观察 程序的执行顺序以及程序中各变量的值 的变化。或者人工模拟计算机执行,要 手工进行计算。 ▪ 写程序:先逐层地写算法!再写程序!

重要提示: 什么时候用指针: ■当想用指针间接引用变量的时候 当想希望用指针提高程序效率的时候 不要: 能直接引用变量的时候不要用指针 能用数组名字指针数组的时候不要用指针
3 重要提示: ▪ 什么时候用指针: ▪ 当想用指针间接引用变量的时候 ▪ 当想希望用指针提高程序效率的时候 ▪ 不要: ▪ 能直接引用变量的时候不要用指针 ▪ 能用数组名字指针数组的时候不要用指针

问题 当我们处理实际问题时,如何申请空间? a int a[100]:总是有一定的浪费*/ a int a[n:/不合法* 如何根据实际需要申请n个内存存放n个 数据?
4 问题 ▪ 当我们处理实际问题时,如何申请空间? ▪ int a[100]; /*总是有一定的浪费*/ ▪ int a[n]; /*不合法*/ ▪ 如何根据实际需要申请n个内存存放n个 数据?

四、动态分配内存 ?问题:如何解决根据班级实际人数来定 义数组? 自己根据实际需要向系统申请内存 如何申请呢?
5 四、动态分配内存 ?问题:如何解决根据班级实际人数来定 义数组? 自己根据实际需要向系统申请内存 如何申请呢?

三个相关库函数 ■# include void* malloc (unsigned int size)i 向系统申请大小为size的内存块,把首地址返回。如果 申请不成功,返回N void* calloc (unsigned int num, unsigned int size)i 向系统申请num个size大小的内存块,把首地址返回。 如果申请不成功,返回NULL v。 id free(void*p); 释放由ma11oc()和ca11oc()申请的内存块。P是指向 此块的指针 ·vid*类型的指针可以指向任意类型的变量
6 三个相关库函数 ▪ #include ▪ void* malloc(unsigned int size); ▪ 向系统申请大小为size的内存块,把首地址返回。如果 申请不成功,返回NULL ▪ void* calloc(unsigned int num, unsigned int size); ▪ 向系统申请num个size大小的内存块,把首地址返回。 如果申请不成功,返回NULL ▪ void free(void* p); ▪ 释放由malloc()和calloc()申请的内存块。p是指向 此块的指针 ▪ void*类型的指针可以指向任意类型的变量

动态数组举例 动态一维数组 2动态二维数组,但看成一维数组 3动态二维数组
7 动态数组举例 1 动态一维数组 2 动态二维数组,但看成一维数组 3 动态二维数组

动态一维数组 include #include void maino n,p= NULL; printf(" Please enter array size: ) scan f("%d",&n) p=(int) malloc(n* sizeof〔int)://根据上边输入的人数申请内 存 printf("please input %d intergers", n) for(i=0;i<n;i++)∥/为动态数组输入数据 scanf("%d",&p):∥/也可以用 scanf("%d",p+) outs( the array is: ) for(i=0; i<n: i++ printf( %4d" P[i]: free(P):/释放申请的内存空间
8 动态一维数组 #include #include void main() { int i,n,*p = NULL; printf("Please enter array size:"); scanf("%d", &n); p = (int *) malloc(n * sizeof (int)); //根据上边输入的人数申请内 存 printf("please input %d intergers",n); for(i=0;i<n;i++) //为动态数组输入数据 scanf("%d",&p[i]); //也可以用scanf("%d",p+i); puts("the array is:"); for(i=0;i<n;i++) printf("%4d",p[i]); free(p); //释放申请的内存空间 }

动态二维数组,但看成一维数组来处理 (通过列地址引用二维数组元素) Include #include void maino int i,j, m, n, *p= NULL printf" Please enter size of row: ) scan fc printf"Please enter size of line: ) scant yod, &n: p=(int )calloc(n*m, sizeof (int)): /根据前边输入的行、列宽度申请内存空间 printf"please input %d intergers", m"n): for(=0;<m;i++) forgj=0: j <n: j++) scanf( yod, &p[in+jD: /为二维数组输入数据,但使用的是一维数组的引用形式 puts( the array is: ) for(=O; i<m: i++ for(j=0; j <n; j++) printf 9o4d" P[in+jD) putchar ("\"): free(P)://释放申请的内存空间
9 动态二维数组,但看成一维数组来处理 (通过列地址引用二维数组元素) #include #include void main() { int i,j,m,n,*p = NULL; printf("Please enter size of row:"); scanf("%d", &m); printf("Please enter size of line:"); scanf("%d", &n); p = (int *) calloc(n*m, sizeof (int)); //根据前边输入的行、列宽度申请内存空间 printf("please input %d intergers",m*n); for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",&p[i*n+j]); //为二维数组输入数据,但使用的是一维数组的引用形式 puts("the array is:"); for(i=0;i<m;i++) { for(j=0;j<n;j++) printf("%4d",p[i*n+j]); putchar('\n'); } free(p);//释放申请的内存空间 }

#include #include 动态二维数组 void maino (通过行地址引用 int i,j, m, n, *p= NULL, Parray =NULL printf Please enter size of row: ) scanf( %od",&m) 二维数组元素) printf" Please enter size of line: ) scanff yod",&n p=(int)cloc(m,n" sizeof〔nt)://根据前边输入的行、列宽度申请内存空间 Array=(int*)cloc(m, sizeof(int”)://根据前边输入的行宽度申请一个指针数组要用的内存 空间 for(i=0;i<m+》指针数组中存储二维数组每一行的首个元素的地址(列地址) Parral ]=p printf"please input %d intergers", m*n): for(i=O: i<m: i++) for(j=0; j<n; j++) scanf("%d",C(Pary+)+):/二维数组输入元素。指针数据名就相当于二维数组名 puts( the array is for(=0:i<m;i++) Array行地址P列地址 for(j=0; j <n: j++) printf(", ParraylQLD putchar ("\") free(P):/释放内存空间 &P[o] 123 free(Array) &P[3] 456
10 #include #include void main() { int i,j,m,n,*p= NULL,**Parray=NULL; printf("Please enter size of row:"); scanf("%d", &m); printf("Please enter size of line:"); scanf("%d", &n); p = (int *) calloc(m, n*sizeof (int));//根据前边输入的行、列宽度申请内存空间 Parray=(int **)calloc(m,sizeof(int *));//根据前边输入的行宽度申请一个指针数组要用的内存 空间 for(i=0;i<m;i++)//指针数组中存储二维数组每一行的首个元素的地址(列地址) Parray[i]=p+i*n; printf("please input %d intergers",m*n); for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",(*(Parray+i))+j);//为二维数组输入元素。指针数据名就相当于二维数组名 puts("the array is:"); for(i=0;i<m;i++) { for(j=0;j<n;j++) printf("%4d",Parray[i][j]); putchar('\n'); } free(p);//释放内存空间 free(Parray); } 动态二维数组 (通过行地址引用 二维数组元素) Parray行地址 P列地址 &P[0] &P[3] 1 2 3 4 5 6
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第15讲 二维数组与指针.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第14讲 二维数组、二维数组做函数参数.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第13讲 指针与一维数组.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)习题7.ppt
- 重庆邮电大学:《C语言程序设计》课程作业讲评-goldbahe猜想.doc
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第11讲 数组与指针.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第10讲 一维数组与字符数组.ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第七章 符号计算.ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第六章 数值计算_matlab8.ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第五章 M文件(主讲:卢丹).ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第四章 数据和函数的可视化.ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第三章 字符串数组、元胞数组和构架数组.ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第二章 数值数组及其运算(2/2).ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第二章 数值数组及其运算(1/2).ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第一章 MATLAB基础准备及入门(2/2).ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第一章 MATLAB基础准备及入门(1/2).ppt
- 人民邮电出版社:《3ds max 7.0案例教程》第9章 灯光与摄像机.ppt
- 人民邮电出版社:《3ds max 7.0案例教程》第8章 材质的编辑和使用.ppt
- 人民邮电出版社:《3ds max 7.0案例教程》第7章 面片与NURBS建模.ppt
- 人民邮电出版社:《3ds max 7.0案例教程》第6章 合成建棋.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第17讲 共用体&链表.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第18讲 文件.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第1讲 简介与hello world.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第20讲 位运算讲、位段、枚举变量、大型程序开发.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第2讲 简单C程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第3讲 多函数程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第4讲 作用域和选择结构程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第5讲 多分支和循环.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第6讲 循环和综合程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第7讲 综合程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第8讲 模块化程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第9讲 存储类型 宏定义 数组.ppt
- 重庆邮电大学:《C语言程序设计》课程授课计划一.doc
- 重庆邮电大学:《C语言程序设计》课程授课计划二.doc
- 湖南农业大学:《计算机组成原理教案》第二章 数据格式(蒋邵平).ppt
- 湖南农业大学:《计算机组成原理教案》第六章 总线的基本概念(蒋邵平).ppt
- 湖南农业大学:《计算机组成原理教案》第七章 显示器(蒋邵平).ppt
- 湖南农业大学:《计算机组成原理教案》第三章 存储系统(蒋邵平).ppt
- 湖南农业大学:《计算机组成原理教案》第五章 中央处理器(蒋邵平).ppt
- 湖南农业大学:《计算机组成原理教案》第一章 计算机系统概论(蒋邵平).ppt