C语言中malloc参数写sizeof(char)*100而非直接写100的原因是什么?
C语言
malloc(sizeof(char) * 100)写法的原因 从执行结果来说,malloc(sizeof(char) * 100)和malloc(100)是完全等价的,C语言标准明确规定sizeof(char)的结果恒为1,两种写法运行时没有任何差异。推荐写sizeof(char) * 100的原因主要是工程层面的最佳实践,具体如下:
- 语义更清晰,可读性更高
写sizeof(char) * 100可以让读代码的人一眼就明白,这段代码的目的是分配100个char类型元素的内存空间,而非申请一个刚好100字节的无类型内存块,代码的表意更明确。 - 统一编码习惯,避免其他类型场景出错
这种sizeof(元素类型) * 元素个数的写法是动态内存分配的通用范式,对所有类型都适用:比如你要分配100个int类型的空间,直接写malloc(sizeof(int) * 100)即可,不需要手动计算int的字节数,也完全不会因为不同平台基础类型大小差异(比如部分嵌入式平台int占2字节,PC平台占4字节)出现内存分配不足的问题。如果习惯了直接写硬编码的字节数,换用其他类型时很容易出现计算错误,导致内存越界等严重问题。 - 可维护性更强
如果后续需要修改指针的类型,比如要把char *temp改成wchar_t *temp来存储宽字符,只需要把sizeof里的char替换为wchar_t即可,元素数量100不需要做任何调整。如果之前写的是malloc(100),你还需要手动计算100 * sizeof(wchar_t)的结果再修改硬编码值,非常容易漏改导致bug。
额外补充:你贴的代码里
malloc前的(char*)强制类型转换在标准C中是不需要的,malloc返回的void*可以隐式转换为任意类型的指针,加这个转换反而可能掩盖部分未引入stdlib.h头文件的隐式声明问题,不推荐写。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

