2010-07-14 36 views
28

當我在一行聲明多個變量時會發生什麼?例如C多個單行聲明

int x, y, z; 

所有是整數。問題是以下語句中的y和z是什麼?

int* x, y, z; 

它們都是int指針嗎?

+0

編輯的問題,因爲它與Objective C無關目錄C – 2010-07-14 14:17:01

+0

我知道這裏有一個這個問題的重複(我以前肯定讀過這個) – 2010-07-14 14:48:35

回答

59

只有x是int的指針; yz是常規整數。

這是C聲明語法的一個方面,它讓一些人前往。 C使用聲明符的概念,該概念引入了聲明的名稱以及未由類型說明符提供的附加類型信息。在聲明

int* x, y, z; 

的說明符*xy,並且z(那就是你可以寫任何int* xint *x,而這個問題的幾個原因之一,我建議使用第二種風格的C語法的事故)。的xy,和z的int岬由類型說明符int指定,而由聲明符*x指定的x指針岬(IOW,表達*x具有類型int)。

如果你希望所有三個對象都是指針,你有兩個選擇。您可以聲明爲指針明確:

int *x, *y, *z; 

,或者你可以創建一個整型指針的typedef:

typedef int *iptr; 
iptr x, y, z; 

只要記住,聲明指針時,該*是變量名稱的一部分,而不是類型。

+1

真正的完整答案,以及*是否爲類型或變量的基本問題。 – ruralcoder 2010-07-14 14:58:24

8

在你的第一句話:

int x, y, z; 

他們都是int秒。

然而,在第二個:

int* x, y, z; 

只有x是指向intyz是普通的ints。

如果你希望它們都被指向int是你需要做的:

int *x, *y, *z; 
+3

這是間距'int * foo;'的一個原因是真的被誤導了。在這個問題的例子中,它看起來像3個變量都是「'int *'」類型的。我會說這個間距幾乎和'a + b * c'一樣令人反感。 – 2010-07-14 14:59:59

6

只有x是一個int指針。 Y和Z將會是int。 如果你想要個三分球:

int * x, * y, * z; 
3

重要的是要知道,在C中,聲明模仿使用。 *一元運算符在C中是正確的關聯。因此,例如在int *x中x是指向int(或int-star)的指針類型,而在int x中,x的類型爲int。

正如其他人也提到的,在int* x, y, z; C編譯器聲明x爲一個int星,y和z爲整數。