我有一个关于malloc函数的问题,如以下示例所示:
char *block = malloc(1024 * sizeof(char));
当左侧的类型是指针的内容 (*) 而右侧的类型是指针时,为什么赋值有效?
在 C 中,在表达式中,*x
指的是x
指向的事物。在表达式中,*
是一个运算符,表示使用指向的对象。
在声明中,*
不是运算符。在声明中,您可以通过"显示"表达式的外观来解释您希望事物成为哪种类型,并说明您希望该表达式是什么类型。所以,在char *block
中,我们说"我们希望表达*block
是一个char
"。由此,编译器推断block
必须是指向char
的指针。
然后,在完整的声明char *block = malloc(1024 * sizeof(char));
中,我们说"声明block
是指向char
的指针,然后初始化block
到malloc
的结果。我们正在初始化block
,而不是*block
。
换句话说,赋值表达式将右侧的值分配给左侧的对象。声明将右侧的值分配为左侧声明的事物的初始值。由于声明的特殊语法,左侧声明的东西只是其中的标识符,而不是整个左侧解释为表达式。