三个相关库函数 ■# include< stdlib.h> 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 <stdlib.h> ▪ 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 <stdio. h> #include <stdlib. h> 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<stdio.h> #include<stdlib.h> 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 <stdio. h> #include<stdlib. h> 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<stdio.h> #include<stdlib.h> 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);//释放申请的内存空间 }