天津市网站建设管理办法,嘉兴简单建站,泰安集团网站建设流程,网站维护中页面一、malloc函数
1、什么是malloc函数
malloc是memery(内存)和allocate(分配)的缩写#xff0c;顾名思义#xff0c;malloc函数为动态分配内存的意思 2、malloc函数语句
int *p(int *)malloc(sizeof(int))malloc函数的形参为申请的内存空间大小#xff0c;上述申请了一个i…一、malloc函数
1、什么是malloc函数
malloc是memery(内存)和allocate(分配)的缩写顾名思义malloc函数为动态分配内存的意思 2、malloc函数语句
int *p(int *)malloc(sizeof(int))malloc函数的形参为申请的内存空间大小上述申请了一个int型数据的大小
malloc函数的返回值是这一块内存空间的首地址上述代码即是将指针变量p指向这动态申请内存的首地址。
(*int)强制类型转换即将该返回的地址类型强制转换为一个整型变量的地址也就是说p和p1相差
一个整型大小。
上述代码一个申请了12个字节的内存大小p变量占8个字节(与cpu的大小有关)
p指向的内存为4个字节。
p本身的内存是静态分配的p指向的内存是动态分配的
freep把p指向的内存释放掉而p本身的内存只能由程序执行完毕系统自动释放3、malloc函数的用法
int *parry(int *)malloc(sizeof(int*5);动态申请5个整型变量大小的内存即20个字节parry指针变量指向的是该内存的首地址
int * 表示该指针变量只能指向int型变量的地址故parry等价于指向前4个字节
*parry等价于parry[0];#include stdio.h
#include malloc.h
int main()
{int *parry (int *)malloc(sizeof(int) * 5);for (int i 0; i 5; i){printf(请输入%d个元素的值\n, i 1);scanf(%d, parry[i]);}for (int i 0; i 5; i){printf(第%d的值为 %d \n, i 1, parry[i]);}return 0;
}创建动态数组的好处
1、动态的决定数组的大小2、数组可以由程序员动态的创建和释放3、数组可跨函数使用
4、初始化内存空间
以mem开头的函数被编入字符串标准库函数的声明包含在头文件string.h中memset:使用一个常量字节填充内存空间memcpy拷贝内存空间memmov拷贝内存空间memcmp比较内存空间memchar在内存空间搜索一个字符
#include stdio.h
#include malloc.h
#include string.h
#include stdlib.h
int main()
{int *parry (int *)malloc(sizeof(int) * 5);if (parry NULL){exit(-1);}memset(parry, 0, sizeof(int) * 5);for (int i 0; i 5; i){printf(%d , parry[i]);}free(parry);return 0;
}二、calloc函数
动态申请内存空间并对其初始化int *p(int*)calloc(4,sizeof(int));上述语句等价于
int *p(int*)malloc(4*sizeof(int));
memset(p,0,4*sizeof(int));三、realloc函数
重新分配内存空间int *ptrNULL;
ptr (int *)realloc(ptr, sizeof(int));//返回新的内存地址给ptrptr原本的值保存在新的内存空间编写代码让用户任意输入整数输入一个整数就动态添加一个内存空间直到用户输入-1为止#include stdio.h
#include malloc.h
#include string.h
#include stdlib.h
int main()
{int num 0;int i 0;int *ptr (int *)malloc(sizeof(int));if (ptr NULL){exit(-1);}while (1){printf(请用户输入想要录入的数,输入-1跳出程序\n);scanf(%d, num);if (num -1)break;ptr[i] num;i;ptr (int *)realloc(ptr, sizeof(int) * (i 1));if (ptr NULL){exit(-1);}}for (int j 0; j i; j){printf(%d , ptr[j]);}free(ptr);return 0;
}