Jim*_*ion 4 c malloc pointers sizeof
这是来自Pthreads的实际C代码:
ThreadParms *parms = NULL;
if ((parms = (ThreadParms *) malloc (sizeof (*parms))) == NULL)
{
goto FAIL0;
}
parms->tid = thread;
parms->start = start;
parms->arg = arg;
Run Code Online (Sandbox Code Playgroud)
他们为什么选择malloc*parms而不是ThreadParms?看起来它只分配一个指针(这将是一个错误),但它显然分配了整个结构的大小.它是否正确?
这是C中的常见技巧 - 使用解除引用指针表达式代替实际类型.
理由如下:如果有的话
some_type *some_var = malloc(sizeof(*some_var));
Run Code Online (Sandbox Code Playgroud)
然后更改some_type
为some_other_type
,代码将继续正常工作只有一个更改.
但是,如果你开始
some_type *some_var = malloc(sizeof(some_type));
Run Code Online (Sandbox Code Playgroud)
然后你必须改变some_type
两个地方:
some_other_type *some_var = malloc(sizeof(some_other_type));
Run Code Online (Sandbox Code Playgroud)
或者你的代码会有错误.
看起来它只分配一个指针(这将是一个错误)
星号sizeof
评估整个大小struct
,因此代码是正确的.