0
我的問題很簡單,這是否C:鑄造新的結構VS鑄造給定結構
typedef struct {a;b;c;d;}bar;
((bar*)ANOTHERSTRUCTPOINTER)->a=1;
((bar*)ANOTHERSTRUCTPOINTER2)->a=1;
//<...>
((bar*)ANOTHERSTRUCTPOINTERn)->a=1;
具有相同的執行時間呢?
((struct {a;b;c;d;}*)ANOTHERSTRUCTPOINTER)->a=1;
((struct {a;b;c;d;}*)ANOTHERSTRUCTPOINTER2)->a=1;
//<...>
((struct {a;b;c;d;}*)ANOTHERSTRUCTPOINTERn)->a=1;
請記住這只是一個例子,所以不要質疑其實我並沒有使用數組
我所知道的是,他們做同樣的事情,但我還是有疑問,因爲在第一個結構只定義一次,而在第二個它在每一個塑像的定義(或者所以它看起來像對我來說,這就是爲什麼我問) –
你是正確的結構每次重新定義,但這發生在編譯時,而不是運行時。在運行時,結構的「字段」僅由編譯器對其起始地址進行硬編碼(偏移)。 – Wyzard
我想我應該補充一點,這個答案在技術上是特定於平臺的,並且不是由C標準保證的 - 原則上,您可能會使用一個在運行時解析源代碼的C解釋器,在這種情況下,重複的結構定義可能需要額外的工作。但實際上,每個人都將C編譯爲機器碼,並且編譯器將結構字段解析爲固定的偏移量。 – Wyzard