2012-01-31 261 views
0

所以,在this引導我讀了說C++:聲明指針

char * terry; 

從說

char* terry; //or 
char *terry; // FYI: I understand what these two do. 

說是不同的「我要強調的是,當我們使用 聲明一個指針時,我們使用的星號(*)意味着它是一個指針(i t是其 類型化合物說明符的一部分),並且不應該將其與 解引用運算符相混淆,我們之前已經看到這一點,但它也是用星號(*)編寫的 。他們是簡單地用相同的符號表示的兩個不同 的事情。」

不過,我不明白這是爲什麼。也許我把報價走錯了路,現在我已經讀一次,但我仍然感到困惑。誰能告訴我,如果這是錯誤或正確的,爲什麼?

謝謝。

+0

可能的重複[你最喜歡的指針聲明風格是什麼,爲什麼?](http://stackoverflow.com/questions/377164/whats-your-preferred-pointer-declaration-style-and-why) – 2012-01-31 23:14:03

+0

爲什麼會以「我想強調...」爲開頭的陳述導致你總結出你提出的問題是什麼? – 2012-01-31 23:21:28

回答

8

不,這三個是完全一樣的,只要解析器關注。人們當然有其使用的原因每種風格,但並不是真正的「正確」方式。作爲編輯筆記,我更喜歡:

char *terry; 

你的鏈接的作者描述的是,在聲明中*是用於取消引用指針一元*操作有些不同:

char *terry = "abcdefg"; // declaration & initialization 
*terry = 'x';   // dereference 

這種潛在的不道德的行爲實際上是一個我更喜歡上面提到的符號 - 這使得兩種情況看起來都一樣,所以沒有混淆的餘地。

+0

那麼,爲什麼我會使用'char * terry'風格呢? – Yokhen 2012-01-31 23:08:48

+1

@Yokhen - 我不會。永遠。如果你願意,你當然可以 - 對於編譯器來說,它幾乎沒有區別。 – 2012-01-31 23:11:20

+0

我使用'char * terry;'因爲我覺得它看起來不錯。我也喜歡,我可以更容易地看到這個和解引用時的區別(使用'* terry ='x';'樣式)。總之它沒有什麼區別...... – 2012-01-31 23:23:02

1

我認爲所有三個都是一樣的 一旦你聲明瞭一個指針,例如

int *x; 

,後來要取消對它的引用您會使用

*x 
0

我喜歡

char *terry; 

只是因爲那麼,如果你這樣做

char *terry, *jerry, larry; 

很明顯你忘了指針。

+0

這是使用第二種形式的原因之一。 – 2012-01-31 23:15:56

+0

...或者只是很好,並在單獨的行中聲明它們。 – Casey 2012-01-31 23:26:40

1

教科書經常建議寫char *terry提醒你,在聲明char *terry, jerry特里是一個指針,但傑裏不是。避免noobie錯誤。

其他人寫char* terry,因爲他們將其讀作「char-pointer terry」。這些人可能從不在同一行上聲明指針和非指針,甚至不指定兩個指針。這不是一個不好的規則使用。

否則,空格在C++中幾乎從不重要。除了內部標識符(變量名稱,函數名稱)以外......並不能想到其他任何東西。

0

您可能誤讀了。

char * terry; 
char* terry; 
char *terry; 

都是相同的方式來聲明一個字符指針,命名特里。

至於「正確」的方式,這取決於你的編碼標準。我個人使用char* terry

0

他試圖區分定義char *terry及其定義後的用法,例如, perry = *terry;其中perry取值爲terry而不是地址。就編譯器而言,其他人已經注意到答案,所有三種定義都是相同的。我更喜歡char *terry,其中星號(*)擁抱變量。

0

char * terry; //或 char * terry; 簡單意味着你正在聲明一個char類型的指針。

現在特里持有一個字符變量的地址位置,您可能會要求terry指向它。

如果您打印特里,它將打印內存位置。

如果您解除引用terry(* terry),您將得到該字符,它指向。

這就是你所提到的寫作所說的。