我很难理解结构和指针,因此也很难理解课本和网上的链表示例。
以下代码是什么意思:
(struct NODE *)malloc(sizeof(struct NODE));
请有人详细解释一下好吗?
我知道有东西被分配了内存(结构NODE的字节大小),但是,我不明白是什么
(struct NODE *)
手段。
malloc()
返回已分配内存的地址。malloc()
函数的返回类型是void*
(它不知道您为哪种类型的数据分配内存),要将其分配给您的结构类型的指针,您需要将其类型转换为所需的类型。所以在你的表达式(struct NODE *)
是打字指令:
(struct NODE *) malloc (sizeof(struct NODE));
^
| ^
Typecast | call of malloc function with argument = sizeof(struct NODE)
通常,您应该避免对C中malloc
/calloc
函数的返回值进行类型转换(请阅读:我是否转换malloc的结果?)
在C中,typecast的语法是:
(rhsdatatype) data;
rhsdatatype
应在data
之前的括号中。
在编程中的某些时候,您需要进行类型转换:例如。
int a = 2;
int b = 3;
double c = a / b;
此代码输出0.0
,因为2/3
都是/
的整数。结果将是int,即0
,并且您将其分配给双变量c = 0
。(你可能不想要的)。
所以这里的typecast是解决方案,新代码是:
int a = 2;
int b = 3;
double c = (double)a / (double)b;
它输出的实数输出为:CCD_ 14。
malloc返回void*
。CCD_ 16是将其转换为指向CCD_ 17的指针。
这个强制转换在C中是不需要的。使用它通常被认为是糟糕的风格,因为如果您忘记在malloc
的声明中包含<stdlib.h>
,它可能会导致错误。