【发布时间】:2022-11-30 05:34:45
【问题描述】:
正确方法:
int *x = (int *) malloc(sizeof(int) * 5);
void *x = (int *) malloc(sizeof(int) * 5);
不正确的方式:
int *x (int *) = malloc(sizeof(int) * 5);
这种语法的原因是什么?因为指针是迭代的指针,所以不应该对它进行强制转换(这样它就知道要迭代多少字节)?
【问题讨论】:
-
malloc返回void *。您告诉编译器将void *视为int *,因此它与malloc一起处理。 -
您转换 malloc 的返回值,然后将转换的结果分配给 x。分配的值在 = 的右侧,因此,强制转换属于那里。
-
所以它知道要迭代多少字节不确定那是什么意思。
-
C没有需要铸造右侧。不管怎样,第二个例子是矛盾的:
malloc返回void*那么你为什么要把它转换成int*来分配给void *x?