以下声明中发生了什么?

时间:2014-05-07 08:56:00

标签: c memory-management

陈述是,int *A=(int *)malloc(10 * sizeof(int));任何人都可以告诉我这件事发生了什么吗?

3 个答案:

答案 0 :(得分:1)

您分配内存以在堆上存储10个整数,并将指针保存到名为A的变量中的第一个整数。变量A也在语句中声明。

(int*)是一种类型转换,它将malloc(实际上为void*类型)返回的指针转换为所需的类型int*。在较新版本的C中没有必要。

答案 1 :(得分:1)

如果您有#include <stdlib.h>,则执行documentation所述的内容。

如果你还没有,它会尝试解释类型&#34;指向void&#34;的指针。如int(未定义的行为),然后将类型int的值转换为类型int*(再次,未定义的行为),并将结果值分配给A。< / p>

所以,确保您使用正确的原型用于库函数,并且不要使用不必要的强制转换

答案 2 :(得分:0)

您正在分配内存以存储10个整数。 函数malloc返回一个指向void的指针,因此您将其转换为指向int (int *)的指针,并将其指定给变量A.