在来自 malloc 的 return 值的类型周围添加方括号

Adding brackets around the type of the return value from malloc

当我希望使用 malloc 分配一些内存时,我尝试了以下方法:

(char *) conc_str = (char *) malloc(1);
char *conc_str2 = (char *)malloc(1);

然而,第一个给了我一个错误,说“标识符“conc_str”是undefinedC/C++(20)”。为什么它会抛出错误,而第二种 mallocing 内存的方式却不会?使用 (char *) 与使用 char * 有什么区别?

这一行:

(char *) conc_str = (char *) malloc(1);

是一个语句,它对名为 conc_str 的现有变量执行强制转换,并尝试为强制转换的结果赋值。这是无效的,原因有二:conc_str 尚未定义,无法将强制转换的结果分配给。

虽然这一行:

char *conc_str2 = (char *)malloc(1);

是变量conc_str2定义,指定char *作为它的类型,并用值return初始化它malloc.

此外,您不应强制转换 malloc 的 return 值,因为它不是必需的,并且会掩盖代码中的其他问题。

您可以将声明符括在括号中,但不能将类型说明符括在括号中。

例如这些声明是有效的

char *conc_str2;

char * ( conc_str2 );

char ( *conc_str2 );

char ( * ( conc_str2 ) );  

虽然编译器会发出一条消息,指出使用了多余的括号。

至于这样的表达方式

(char *) conc_str

然后将已经(某处)声明(如果确实声明)变量 conc_str 转换为类型 char *.

因此这个记录

(char *) conc_str = (char *) malloc(1);

不是声明而是赋值语句,即使变量 conc_str 已经被声明也是不正确的语句,因为操作数 (char *) conc_str 是不能赋值的右值。