我有一个如下所示的程序,我正在学习 C 中的类型转换。这里我尝试将 void* 转换为 int*。但编译器抛出一个错误,指出“错误:需要算术或指针类型的操作数类型为'void' - 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;
}
最佳答案
在带有下标运算符的表达式中
a[2]
这里使用了指针运算。该表达式的计算结果如下:
*( a + 2 )
反过来,这个表达式a + 2
的计算结果实际上是这样的
( char * )a + 2 * sizeof( *a )
但是void
类型是一个不完整类型,即它的大小未知。因此编译器不知道表达式 sizeof( *a )
的值是什么,其中 *a
的类型为 void
。结果它发出错误消息。
首先需要编写的是将void *
类型的指针a
强制转换为int *
类型
因此 printf
的调用可以如下所示
printf("%d\n", ( ( int * )a )[2] );
或
printf("%d\n", *( (int *)a + 2) );
关于c - C 中的数组类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67251564/