2014-01-28 77 views
-6

这个语句在C语言中的含义是什么?结构名称* ptr =(相同结构名称*)p2;

struct foo *ptr = (struct foo *) p2; 
+0

语法错误...这个片段来自哪里? – Jori

+0

是怎么回事?我认为它是真的 – Fagun

+0

什么是真的?这段代码不会像你在这里所说的那样工作。 – Jori

回答

2

在左侧开始:

struct foo *ptr 

声明ptrstruct foo *类型,这是指向struct foo的指针。

=ptr变量初始化为任何右手边评估的值。

而右手侧

(struct foo *) p2 

是投射p2struct foo *类型的表达式。

+0

是的..恩,这个答案我想要 – Fagun

2

你不给我们所需要的所有信息:

struct name *ptr = (Same struct name *) p2; 

让我们把它的东西是可以编译:

struct foo* ptr = (struct foo*) p2; 

但现在我们错过了什么p2是。所以,我会认为p2是一个普通的C指针,即void*

void* p2; 
struct foo* ptr = (struct foo*) p2; 

所以在这里你分配给ptrp2指向的地址。在现在我的例子,这是很没有意义的......但如果你分配一些内存:

void* p2 = malloc(sizeof(struct foo)); 
struct foo* ptr = (struct foo*) p2; 

然后p2是有那么你分配到ptr一个内存空间的地址。

我在这里给你的例子是用做一般的两个变量:

struct foo* ptr = (struct foo*) malloc(sizeof(struct foo)); 
+0

UINT32 p2;是类型 – Fagun

+1

既然void *可以被赋值给任何指针,那么铸造的例子就是不相干的。 – this

+0

[看起来像它被认为是](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)虽然我已经被教导在单一的我的mallocs,而且我认为有些编译器会在你执行'-Wall'时抱怨这个问题。 – zmo