2012-02-06 67 views
3

我有以下結構這兩個與stuct相關的聲明是否有區別?

typedef struct _LSHFunctionT 
{ 
    double *a; 
    double b; 
} LSHFunctionT, *PLSHFunctionT; 

我的問題是;有這兩個聲明

PLSHFunctionT myPointer1; 

LSHFunctionT *myPointer2; 

之間的區別,如果不是,那麼爲什麼人們明確地使用他們的兩(LSHFunctionT和* PLSHFunctionT)。爲什麼不使用LSHFunctionT。

是否同路以下兩個聲明

PLSHFunctionT *myPointer3; 

LSHFunctionT **myPointer3; 
+0

和你的問題:「爲什麼人們明確地使用他們的兩(LSHFunctionT和* PLSHFunctionT)」,我覺得有些人只是覺得「更清潔」的編寫'Pwhatever ptr'不是什麼'* ptr',因爲他們不不喜歡星號或其他東西。 ::聳肩:: – 2012-02-06 18:30:39

回答

2
typedef struct _LSHFunctionT 
{ 
    double *a; 
    double b; 
} LSHFunctionT, *PLSHFunctionT; 

是,PLSHFunctionT x;等於LSHFunctionT* x;

是的,PLSHFunctionT* x;等於LSHFunctionT** x;

typedef目的是爲了新名稱分配給現有類型。您可以定義typedef int lol;並聲明變量lol i;,但編譯器無論如何都會認爲它是int

您也應該檢查這些問題:
When should I use typedef in C++?
Why should structure names have a typedef?

希望這有助於。

0

我似乎沒有區別。有不同的編程風格。

0

是的。即使在第二種情況下,它們也完全相同。

我個人更喜歡明確地使用*如果我想聲明一個指針。在大多數情況下,它使代碼可讀。使用指針類型的typedef通常會降低可讀性,儘管有時它可能會增加可讀性,尤其是當您使用Windows API時。

+0

啊,是的,Windows的API,其PSTR,LPSTR,PCSTR,LPCSTR,LPCTSTR,LPUTSTR,LPCUTSTR等等。可愛。 – 2012-02-06 18:41:23

1

區別在於強調。通常不明確地寫*可能表明PLSHFunctionT被設計爲用作句柄(不知道/訪問結構元素)。如果明確寫入*,如LSHFunctionT * myPointer,則可能指示要用於訪問值的數組或結構。

2

是的,它們是相同的。

定義指針類型的一個很好的理由是複雜的表達式。例如,如果你有一個函數引用一個指針,你會發現哪一個更容易理解?

void foo(PLSHFunctionT & ref); 

void foo(LSHFunctionT * (&ref)); 

我什至不知道我的語法正確的第二個!

+0

'void foo(LSHFunctionT *&ref)'很好。不需要使用額外的大括號。 – Nawaz 2012-02-06 18:31:14

+0

@Nawaz,謝謝。但是你看到我的觀點 - 很難記住這不是你每天都做的事情。我起初確實有錯,但我做了一個快速編輯。 – 2012-02-06 18:32:51

+0

是的。它很容易犯錯。可以嘗試'void foo(LSHFunctionT&* ref)'這是一個編譯錯誤。但是當你使用'typedef'時也是一樣的。例如'typedef T & RT; void foo(RT * ptr)',這是編譯錯誤。 – Nawaz 2012-02-06 18:36:45

0

的聲明是一樣的。在某些情況下,pointer-typedef方法可以提高代碼的可讀性。有人可能會說,這:

PLSHFunctionT calls[]; 

是很容易,這個閱讀:

LSHFunctionT *calls[]; 
1

有表面上兩者沒有區別。但是,使用指針typedef時,無法將其聲明爲指向const的指針,只是const-pointer-to-non-const。

例如,你可以說

const LSHFunctionT* const_ptr;const PLSHFunctionT const_ptr2;使得指針常量,而不是指針對象。

最後要注意的是,在C++中,整個事物的合法性是有問題的,因爲以_<capital>開頭的名字是爲實現保留的,並且這種typedef幾乎從不以這種方式使用。

+0

你能否詳細說明你的最後一點。我不明白。 – 2012-02-06 18:38:32

相關問題