如何使用无效*?
How to use void*?
为什么这段代码使用& (*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
声明为 void**
类型,a double void pointer.Try 而不是将 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;
}
注意:如果没有适当类型的强制转换,则无法取消引用空指针,int
在此 case.Also 指针算法中不允许空指针。
要打印数组元素的地址而不是元素本身,请使用:
for (i = 0; i < 10; i++) {
printf("%p\n", (void *)((int *)p + i));
}
为什么这段代码使用& (*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
声明为 void**
类型,a double void pointer.Try 而不是将 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;
}
注意:如果没有适当类型的强制转换,则无法取消引用空指针,int
在此 case.Also 指针算法中不允许空指针。
要打印数组元素的地址而不是元素本身,请使用:
for (i = 0; i < 10; i++) {
printf("%p\n", (void *)((int *)p + i));
}