【发布时间】:2010-06-25 04:35:13
【问题描述】:
考虑以下行:
char *p = malloc( sizeof(char) * ( len + 1 ) );
为什么要使用 sizeof(char)?这没有必要,不是吗?还是只是风格问题?
它有什么优势?
【问题讨论】:
-
stackoverflow.com/questions/1011806/… 的重复尽管我不同意那里接受的答案(我更喜欢省略 sizeof(char))
考虑以下行:
char *p = malloc( sizeof(char) * ( len + 1 ) );
为什么要使用 sizeof(char)?这没有必要,不是吗?还是只是风格问题?
它有什么优势?
【问题讨论】:
是的,这是风格问题,因为您希望 sizeof(char) 始终是一个。
另一方面,在执行malloc 时使用sizeof(foo) 是一种习惯用法,最重要的是它可以使代码自我记录。
也许也更适合维护。如果你从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 ) );
对于普通缓冲区。
【讨论】:
len +1 部分仅适用于类似字符串的对象。
它用于自我记录操作。该语言将 char 定义为恰好是一个字节。它没有指定该字节中有多少 位,因为某些机器具有 8、12、16、19 或 30 位最小可寻址单元(或更多)。但是一个 char 总是一个字节。
【讨论】:
规范规定 chars 是 1 字节,因此它是严格可选的。出于一致性目的,我个人总是包含sizeof,但这并不重要
【讨论】: