在来自 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
是不能赋值的右值。
当我希望使用 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
是不能赋值的右值。