为什么这段代码使用& (*p)[i]
?
typedef void* sir;
int main(){
sir *p;
int x[10],i;
for(i = 0;i < 10;i++)
x[i] = i;
p = &x;
for(i = 0;i < 10;i++)
printf("%d ",&(*p)[i]);
return 0;
}
最佳答案
您将 sir
类型定义为void *
,因此当您编写 sir *p
时,您正在声明 p
code> 为 void**
类型,一个双 void 指针。尝试将 p
声明为 sir p
,并打印元素数组,使用以下内容:
#include <stdio.h>
#include <stdlib.h>
typedef void* sir;
int main(void)
{
sir p;
int x[10], i;
for (i = 0; i < 10; i++)
x[i] = i;
p = &x;
for (i = 0; i < 10; i++)
printf("%d ", *((int *)p + i));
return 0;
}
注意:如果没有适当类型的转换,则无法取消引用 void 指针,在本例中为 int
。此外,void 指针上不允许进行指针算术。
要打印数组元素的地址而不是元素本身,请使用:
for (i = 0; i < 10; i++) {
printf("%p\n", (void *)((int *)p + i));
}
关于c - 如何使用void*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35792802/