微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C 中的数组类型转换

如何解决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)。 avoid *,因此您正在取消引用非法的 void *

您应该将 a 转换为 int *,然后取消引用它,如下所示:

*((int *)a + 2)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。