C规范编辑笔记(十二)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
往期文章
C规范编辑笔记(一)
C规范编辑笔记(二)
C规范编辑笔记(三)
C规范编辑笔记(四)
C规范编辑笔记(五)
C规范编辑笔记(六)
C规范编辑笔记(七)
C规范编辑笔记(八)
C规范编辑笔记(九)
C规则编辑笔记(十)
C规范编辑笔记(十一)
正文
放假了就把这个C规范编辑笔记更新完吧估计应该还可以更新两三篇估计就结束了今天我们来讲第十二篇话不多说直接开讲~
1、规则 - 结构必须通过引用传递给函数。如果传入的参数是一个数组建议形参以这样的数组形式比较好如下
Bad example:
void func(int32_t *tab, uint32_t count);
//这种形式会被认为是1、要么是通过地址传递的整数2、或者是一个整数数组
Good example:
void func(int32_t tab[], uint32_t count); //这样就知道tab是一个数组
2、函数的参数如果没有用到建议去除否则会占用其堆栈。
3、这种空指针判断可以学习一下
unsigned char 8string =NULL;
printf("%s %d\n", (string ? string : "null"), 1); //防止传递空指针
4、规则——尽快释放动态分配的内存。 任何动态分配的内存空间在不再需要时必须释放。
5、规则——不要通过 realloc 改变动态分配。
这里说明一下*realloc库函数作用是C 库函数 void *realloc(void *ptr, size_t size) 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
关于该库函数内存分配
1、如果有足够空间用于扩大mem_address指向的内存块则分配额外内存并返回mem_address。这里说的是“扩大”我们知道realloc是从堆上分配内存的当扩大一块内存空间时 realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节如果能够满足自然天下太平。也就是说如果原先的内存大小后面还有足够的空闲空间用来分配加上原来的空间大小= newsize。那么就ok。得到的是一块连续的内存。
2、如果原先的内存大小后面没有足够的空闲空间用来分配那么从堆中另外找一块newsize大小的内存。并把原来大小内存空间中的内容复制到newsize中。返回新的mem_address指针。数据被移动了。老块被放回堆上。
具体关于realloc的使用可以查看相关百度~
例子如下
Bad example:
#include <stdlib.h>
void fonc(size_t len)
{
long *p;
p = (long *) malloc(len *sizeof(int)); /* 类型不正确 */
...
p = (long *) realloc(p,0); /* 通过 realloc 释放 p*/
...
free(p); /* p的双重释放 */
}
Good example:
#include <stdlib.h>
void fonc(size_t len)
{
long *p;
p = (long *) malloc(len *sizeof(long));
...
free(p); /* realloc 删除并替换为 free */
}
好了第十二篇C规范编辑笔记分享我们就到这里了我们第十三篇见~
本人水平有限上述信息仅供学习参考如有错误和不妥之处请多多指教。
另外创作不易请勿抄袭如果有帮助到大家的话希望大家可以点个赞谢谢~