【发布时间】:2020-10-23 16:12:17
【问题描述】:
我猜动态创建的变量必须单独初始化,而不是在分配时。为什么下面的代码行不编译? 为什么我会在 'p' 之前收到错误消息“预期的 ')'。
*(int *p = malloc(sizeof(int))) = 23;
|
【问题讨论】:
-
你可以用
calloc()初始化为零 -
我同意。但我的主要观点是错误消息的原因,我猜@chqrlie 给出了原因
-
请注意,“初始化”在 C 中具有特定的含义,并且语义在某些方面与赋值不同。这里的变量是
p,它在您的示例代码中进行了初始化。我不确定是否使用 @pmg 所指出的calloc()之类的东西是否符合 C 中变量初始化的语言律师定义,但如果不这样做,则根本没有办法正式“初始化”任何动态分配的对象C - 你必须 assign 值。同样,这是因为“赋值”与“初始化”不同。 -
@AndrewHenle:我同意将
calloc()分配的空间称为“初始化”可能会扭曲“语言律师”方面。虽然C11 7.22.3.2 在 p2 中说:“......空间被初始化为所有位为零。”
标签: c initialization malloc expression declaration