C中的指针和链表中的使用



我很难理解结构和指针,因此也很难理解课本和网上的链表示例。

以下代码是什么意思:

(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)

通常,您应该避免对Cmalloc/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>,它可能会导致错误。

相关内容

  • 没有找到相关文章

最新更新