bod*_*ydo 12 c malloc pointers sizeof
我看到人们经常编写C代码,例如:
char *ptr = malloc(sizeof(char)*256);
Run Code Online (Sandbox Code Playgroud)
这真的有必要吗?标准说,sizeof(char)==1根据定义,只写这样有意义:
char *ptr = malloc(256);
Run Code Online (Sandbox Code Playgroud)
谢谢,Boda Cydo.
Jer*_*fin 25
是的,C定义sizeof(char)为1,始终(并且C++也是如此).
尽管如此,作为一般规则,我建议如下:
char *ptr = malloc(256 * sizeof(*ptr));
Run Code Online (Sandbox Code Playgroud)
这样,当你的老板说出类似的话:"哦,顺便说一句,我们刚收到一份来自中国的订单,所以我们需要尽快处理所有三个中文字母",你可以把它改成:
wchar_t *ptr // ...
Run Code Online (Sandbox Code Playgroud)
其余的可以保持不变.鉴于你将有大约1000万头疼,甚至在合理的中途处理i18n,甚至消除一些是值得的.当然,这假设通常的情况是你的chars真的打算保存字符 - 如果它只是某种原始缓冲区,你真的想要256字节的存储空间,无论可能有多少(少数)字符是的,你应该坚持malloc(256)并完成它.
这个问题甚至不应该存在.你应该采用一种更优雅的写作malloc方式
ptr = malloc(N * sizeof *ptr)
Run Code Online (Sandbox Code Playgroud)
即尽量避免提及类型名称.类型名称用于声明,而不用于语句.
这样你的mallocs将永远是类型独立的,并且看起来是一致的.乘以1是多余的这一事实将不那么明显(因为有些人发现乘法sizeof(char)很烦人).