*(int *)a - 有人可以解释一下

时间:2014-01-15 03:57:08

标签: c pointers

有人能解释一下你可以如何使用*(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是指针吗?有点困惑。

2 个答案:

答案 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)

中某个结构a的指针

可能只是添加,如果j不是这种类型,那么运行时可能会出现奇怪的错误。