2014-01-28 102 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