建企业网站怎么做,用word怎么做网站,查找网络营销方式,企业主体负责人和网站负责人点击蓝字关注我们1.当前我们知道的内存的使用方法2.为什么存在动态内存分配如上我们已学的开辟空间的方式有两个特点#xff1a;空间开辟的大小是固定的必须指定数组的长度所以就产生了空间开大了浪费开小了不够用的问题#xff0c;所以使用动态内存分配3.动态内存函数#…点击蓝字关注我们1.当前我们知道的内存的使用方法2.为什么存在动态内存分配如上我们已学的开辟空间的方式有两个特点空间开辟的大小是固定的必须指定数组的长度所以就产生了空间开大了浪费开小了不够用的问题所以使用动态内存分配3.动态内存函数1malloc 和 freea.malloc函数malloc函数向内存申请一块连续可用的空间并返回指向这块空间的指针。如果开辟成功返回一个指向开辟好空间的指针如果开辟失败返回一个NULL指针因此malloc的返回值一定要做检查b. free函数free函数用来释放动态开辟的内存如果参数p指向的空间不是动态开辟的(eg:数组)那free函数的行为是未定义的如果参数p是NULL指针则函数什么事都不用做c.举例说明malloc函数和free函数如何使用 开辟10个整形大小的空间并将0-9放入#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestdlib.h
#includestring.h
int main()
{//向内存申请10个整形的空间int* p (int*)malloc(10 * sizeof(int));//开辟空间失败打印失败原因if (p NULL){//errnoLast error numberprintf(%s\n, strerror(errno));}//开辟空间成功将0-9放入else{for (int i 0; i 10; i){*(p i) i;}for (int i 0; i 10; i){printf(%d , *(p i));}}//释放掉p指向的这段空间但是指针p还是指向这段空间free(p);//防止野指针需要将指针制空p NULL;return 0;
}输出开辟空间失败并打印开辟失败原因 INT_MAX 整形最大–可右键转到定义查看#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestdlib.h
#includestring.h
int main()
{//向内存申请10个整形的空间int* p (int*)malloc(INT_MAX);//开辟空间失败打印失败原因if (p NULL){//errnoLast error numberprintf(%s\n, strerror(errno));}//开辟空间成功将0-9放入else{for (int i 0; i 10; i){*(p i) i;}for (int i 0; i 10; i){printf(%d , *(p i));}}//释放掉p指向的这段空间但是指针p还是指向这段空间free(p);//防止野指针需要将指针制空p NULL;return 0;
}2calloca. calloc函数calloc函数的功能是为num个大小为size的元素开辟一块空间并且把空间的每个字节初始化为0calloc和malloc的区别在于calloc会在返回地址之前把申请的空间的每个字节初始化为0b.举例说明calloc函数如何使用开辟10个整形大小的空间并初始化为0#includestdio.h
#includestdlib.h
#includestring.h
int main()
{int* p (int*)calloc(10, sizeof(int));if (p NULL){printf(%s\n, strerror(errno));}else{for (int i 0; i 10; i){printf(%d , *(p i));}}free(p);p NULL;return 0;
}3realloca. realloc函数p是要调整的内存地址size是调整之后的大小返回值为调整之后的内存起始位置b.realloc在调整内存空间存在的两种情况 情况1原有空间之后有足够大的空间如果p指向的空间之后有足够的内存空间可以追加则直接追加然后返回p#includestdio.h
#includestring.h
#includestdlib.h
int main()
{int* p (int*)malloc(20);if (p NULL){printf(%s\n, strerror(errno));}else{for (int i 0; i 5; i){*(p i) i;}}//得用一个新的变量来接受realloc函数的返回值//防止开辟失败返回NULL给p找不到之前的空间int*ptr (int*)realloc(p,40);if (ptr ! NULL){p ptr;for (int i 5; i 10; i){*(p i) i;}for (int i 0; i 10; i){printf(%d , *(p i));}}free(p);p NULL;return 0;
}情况2原有空间之后没有足够大的空间如果p指向的空间之后没有足够大的内存空间可以追加则realloc函数会重新找一块新的内存区域开辟一块满足需求的空间并把原来内存中的数据拷贝到新的空间释放旧的内存空间最后返回新开辟的内存空间地址#includestdio.h
#includestring.h
#includestdlib.h
int main()
{int* p (int*)malloc(20);if (p NULL){printf(%s\n, strerror(errno));}else{for (int i 0; i 5; i){*(p i) i;}}//得用一个新的变量来接受realloc函数的返回值//防止开辟失败返回NULL给p找不到之前的空间int*ptr (int*)realloc(p,4000);if (ptr ! NULL){p ptr;for (int i 5; i 10; i){*(p i) i;}for (int i 0; i 10; i){printf(%d , *(p i));}}free(p);p NULL;return 0;
}注意得用一个新的变量来接受realloc函数的返回值防止开辟失败返回NULL给p找不到之前的空间如果你年满18周岁以上又觉得学【C语言】太难想尝试其他编程语言那么我推荐你学Python现有价值499元Python零基础课程限时免费领取限10个名额▲扫描二维码-免费领取戳“阅读原文”我们一起进步