【发布时间】:2021-07-18 22:29:44
【问题描述】:
我有一个如下给出的程序,我正在学习 C 中的类型转换。这里我试图将 void* 转换为 int*。但是编译器抛出一个错误说“error: operand of type 'void' where arithmetic or pointer type is required - printf("%d\n",(int *)(a[2]));”
感谢您帮助进行这种类型转换。
#include <stdio.h>
void printArray(void* a){
printf("%d\n",(int *)(a[2]));
}
int main(){
int a[] = {1,2,3,4};
printArray(a);
return 0;
}
【问题讨论】:
-
(int *)(a[2]))==>((int*)a)[2]。您的代码尝试获取不可索引序列的第二个槽值,然后将其转换为int*。您想将指针转换为int*,然后获取(假定的)int序列中的第二个槽值。 -
您必须在取消引用之前进行转换。否则编译器不知道类型的大小,无法计算偏移量。
标签: c implicit-conversion void-pointers pointer-arithmetic