初始化动态分配的整数

Initializing Dynamically allocated integer

我想动态创建的变量必须单独初始化,而不是在分配时初始化。为什么下面的代码行不编译? 为什么我在 'p'".

之前收到错误消息“expected ')'

*(int *p = malloc(sizeof(int))) = 23;

|

定义int *p不能出现在表达式中,这是一个语法错误。您必须使用定义和单独的表达式来初始化内容:

int *p = malloc(sizeof(int));
*p = 23;

int *p;
*(p = malloc(sizeof(int))) = 23;

请注意,在内存分配失败的情况下,上述两种形式都有未定义的行为。

这个

int *p = malloc(sizeof(int))

是变量p的声明。

您不能像表达式一样使用声明。

所以你需要拆分这条线

*(int *p = malloc(sizeof(int))) = 23;

两行如

int *p = malloc(sizeof(int));

*p = 23;

另一种方法是先声明变量p

int *p;

然后在表达式中使用声明的变量

*( p = malloc( sizeof( int ) ) ) = 23;