考虑以下代码行:
char *p = malloc( sizeof(char) * ( len + 1 ) );
为什么要使用 sizeof(char)?这不是必要的,是吗?还是只是一种风格问题?
它有哪些优势?
是的,这是一种风格问题,因为你期望sizeof(char)
始终为1。
另一方面,在使用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 ) );
对于普通缓冲区而言。
type *p = malloc(sizeof(*type) * (len+1));
呢?;) - Nyanlen +1
部分只适用于类似字符串的对象。 - brainjam它用于自我记录操作。该语言定义一个字符恰好为一个字节。它没有指定该字节中有多少个位,因为一些机器具有8、12、16、19或30位最小可寻址单元(或更多)。但是,一个字符始终是一个字节。
sizeof
,但并不重要。