Anu*_*uri 5 c pointers void-pointers pointer-arithmetic
我只是试图使用一个指向整数数组的void指针,我试着看看我是否可以通过将数组转换回int来打印它.但它给了我一些随机价值.你能告诉我哪里出错了吗?
#include<stdio.h>
#include<stdlib.h>
int main(){
int a[5];
int x;
int j;
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
void *arr=a;
for(j=0;j<4;j++){
x = *(int *)(arr+j);
printf("%d",x);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
133554432131072512
Run Code Online (Sandbox Code Playgroud)
为什么它没有固定数组的元素a []即1,2,3,4?
rua*_*akh 12
你需要arr 在添加之前进行投射j.这是一个最小的修复:
x = *(((int *)arr)+j);
Run Code Online (Sandbox Code Playgroud)
但我认为写起来更清楚:
x = ((int *)arr)[j];
Run Code Online (Sandbox Code Playgroud)
您正在进行指针运算,void *但在C中无效.
在GNU C(带有gcc扩展名的C)中,它实际上是允许的,并且sizeof (void)被认为是1.
http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
"指向void和指向函数的指针支持加法和减法操作.这是通过将void或函数的大小视为1来完成的."