2012-07-23 23 views
2

指着我的代碼如下所示:獲得的sizeof鍵入由typedef操作指針

#include <stdio.h> 
typedef struct SomeStruct* ptr; 
main(){ 
    printf("%lu\n",sizeof(ptr)); 
} 

給定的代碼將打印的struct SomeStruct*大小。但我想sizeof(struct SomeStruct)。如果我事先不知道結構體的名稱,有沒有辦法讓我仍然可以找到由ptr指向的結構體的大小?

回答

4

如果你有ptr類型的變量,就可以解除引用它:

ptr v; 
sizeof(*v) 
+0

它似乎不適合我。我得到一個錯誤,說'在ptr之前的預期表達式' – math4tots 2012-07-23 08:06:59

+0

加入quesion - 這不會編譯。 – 2012-07-23 08:10:31

+0

對不起,我沒有仔細閱讀,我以爲你有一個指針變量 – 2012-07-23 08:10:42

4

由於NULL是可被轉換爲類型ptr一個變量,簡單地使用:

sizeof *(ptr)NULL 

替代地,你可以避免使用typedef-ing指針的醜陋行爲,而這個問題完全消失。