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;\
}
第二次不是这样吗?你有什么不同的做法?
答案 0 :(得分:3)
演员没有做任何事。可以将void指针分配给任何没有显式转换的指针。
AND you shouldn't。 C99(或C90,C11)标准不要求演员。
答案 1 :(得分:0)
malloc()的返回类型是void *
因此,当它被分配时,它需要转换为int *
执行(int *)显式执行此操作。如果没有这样做,它将由编译器隐式完成。
指针是一个指针,它只是编译器试图给你带有任何方位的类型安全。对于某些具有某些标志的编译器,如果不存在显式(int *)强制转换,则会收到警告。在这两种情况下,实际得到的编译代码完全相同。
正如米奇所说,它绝对没有。