如何解决C 中的数组类型转换
我有一个如下所示的程序,我正在学习 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;
}
解决方法
在带有下标运算符的表达式中
@ECHO OFF
ECHO running:
cd /d d:\
ggsci.exe
使用了指针算法。此表达式的计算方式为
a[2]
反过来这个表达式 *( a + 2 )
的计算实际上就像
a + 2
但是类型 ( char * )a + 2 * sizeof( *a )
是一个不完整的类型,即它的大小是未知的。因此,编译器不知道表达式 void
的值是多少,其中 sizeof( *a )
的类型为 *a
。结果它会发出一条错误消息。
首先你需要写的是将void
类型的指针a
强制转换为void *
类型
所以 int *
的调用看起来像
printf
或
printf("%d\n",( ( int * )a )[2] );
,
a[2]
等价于 *(a + 2)。 a
是 void *
,因此您正在取消引用非法的 void *
。
您应该将 a
转换为 int *
,然后取消引用它,如下所示:
*((int *)a + 2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。