有人能解释一下你可以如何使用*(int*) a
的工作原理这么简单吗?
以及如何在另一个文件中:(any.h
)
#ifndef ANY_H
#define ANY_H
typedef void * any;
#endif
此处的代码位于另一个文件test.c
中,其中包含any.h
int abcd(any j) {
k = ((struct a*)j)->b[0];
}
的作品?对于struct
,这意味着,j
是指针吗?有点困惑。
答案 0 :(得分:2)
*(int*)a
应该为您提供a
指向的位置的内容,同时将a
视为指向整数的指针。如果a
已经是指向整数的指针,则*(int*)a
相当于*a
。括号中的内容是一个强制转换操作符。
any
现在相当于void *
,或者不引用任何特定值类型的通用指针。 void *
通常用于您不想指定指针指向的位置,但只是在内存中标识位置(不考虑其内容)。要获取void指针指向的值,首先需要将其转换为指向特定类型的指针,这是(struct a*)j
的作用:将j
视为指向{{ 1}}。
答案 1 :(得分:1)
当您输入(int*)
等时,它是cast
。这告诉编译器“思考”该类型的所有内容。
因此,您正在(告诉编译器)j
是指向行((struct a*)j)
可能只是添加,如果j
不是这种类型,那么运行时可能会出现奇怪的错误。