当动态地为数组分配内存时(在C中),(int *)转换是做什么的?

时间:2013-09-22 00:57:06

标签: c pointers dynamic malloc allocation

C noob在这里。在运行时声明一个数组时,我已经看到了两种方法。有人可以解释第二个中的(int *)演员吗?

// first way
int numberElements = 5;
int *pointer = malloc(numberElements * sizeof(int));

// second way
...
int *pointer = (int *)malloc(numberElements * sizeof(int));

我只是看不到(int *)演员正在做什么。首先进行分配,可以像这样填充数组......

// first way cont.
... 
for (int i = 0; i < numberElements; i += 1){
    pointer[i] = 0;\
}

第二次不是这样吗?你有什么不同的做法?

2 个答案:

答案 0 :(得分:3)

演员没有做任何事。可以将void指针分配给任何没有显式转换的指针。

AND you shouldn't。 C99(或C90,C11)标准不要求演员。

答案 1 :(得分:0)

malloc()的返回类型是void *

因此,当它被分配时,它需要转换为int *

执行(int *)显式执行此操作。如果没有这样做,它将由编译器隐式完成。

指针是一个指针,它只是编译器试图给你带有任何方位的类型安全。对于某些具有某些标志的编译器,如果不存在显式(int *)强制转换,则会收到警告。在这两种情况下,实际得到的编译代码完全相同。

正如米奇所说,它绝对没有。