您好我最近在网上看到了很多代码(也在SO上),例如:
char *p = malloc( sizeof(char) * ( len + 1 ) );
为什么sizeof(char)?这不是必要的,不是吗?或者只是风格问题? 它有什么优势?
答案 0 :(得分:18)
是的,这是一种风格问题,因为你希望sizeof(char)
永远是一个。
另一方面,在执行sizeof(foo)
时使用malloc
非常习惯,最重要的是它使代码自我记录。
也许更适合维护。如果您从char
切换到wchar
,则会切换到
wchar *p = malloc( sizeof(wchar) * ( len + 1 ) );
没有多想。转换声明char *p = malloc( len + 1 );
需要更多考虑。这都是为了减少心理开销。
正如@Nyan在评论中建议的那样,你也可以做
type *p = malloc( sizeof(*p) * ( len + 1 ) );
表示以零结尾的字符串和
type *p = malloc( sizeof(*p) * len ) );
用于普通缓冲区。
答案 1 :(得分:2)
它用于自我记录操作。该语言将char定义为一个字节。它没有指定该字节中有多少位,因为某些机器具有8,12,16,19或30位最小可寻址单元(或更多)。但是char总是一个字节。
答案 2 :(得分:1)
规范规定字符为1字节,因此它是严格可选的。我个人总是包含sizeof
以保持一致性,但无关紧要