2014-01-15 24 views
0

有人可以解释为什么*(int*) a的工作原理?*(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是指针?有点困惑。

+1

我认为在你的问题中'*(int *)'有点混乱,因为你的例子是一个结构指针强制转换,然后使用' - >'而不是'*'来获得指向信息。无论谁写了“任何”字,都让每个人都变得更加艰难。 – RichardPlunkett

+0

你可以写两行'int * xp = x;'(其中x是一个void poiner),而不是'*(int *)'指向int和'* xp'的是int * – Brandin

+0

'*(int *)',这个例子是两个不同的东西,这就是为什么我写了“和另一个文件”应该让我自己更清楚:)。谢谢你们的帮助! – user3196556

回答

2

*(int*)a应该为您提供a指向的位置的内容,而将a视为指向整数的指针。如果a已经是指向整数的指针,则*(int*)a相当于*a。括号内的内容是一个演员操作符。

any现在相当于void *,或者是一个不涉及任何特定值类型的泛型指针。 void *通常用于不希望指定指针指向的位置,但只是标识内存中的位置(不考虑其内容)。要获得void指针所指向的值,首先需要将其转换为指向特定类型的指针,这是(struct a*)j所做的:将j视为指向struct a的指针。

1

当你输入(int*)等它是一个cast。这告诉编译器“想象”那种类型的东西。

因此,你是铸造(告诉编译器)在j是指向一些结构一个在该行((struct a*)j)

可能只会增加,如果j是不是这种类型的,你可能有奇怪的错误运行。