0

这里是菜鸟。在运行时声明数组时,我看到了两种方法。有人可以解释第二个中的 (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;\
}

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

4

2 回答 2

3

演员什么都不做。可以将 void 指针分配给任何指针,而无需显式强制转换。

你不应该。C99(或 C90、C11)标准不需要演员表。

于 2013-09-22T00:58:37.587 回答
0

malloc() 的返回类型是 void *

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

做 (int*) 明确地做到这一点。如果没有这样做,它会由编译器隐式完成。

指针就是指针,只有编译器试图为您提供类型安全才有意义。对于某些带有某些标志的编译器,如果不存在显式 (int*) 强制转换,您将收到警告。在这两种情况下,实际生成的编译代码完全相同。

正如米奇所说,它完全没有任何作用。

于 2013-09-22T01:01:52.110 回答