2015-11-23 64 views
3

初始化指針的兩種不同的方法第一種方法是這樣的:爲什麼會有用C

int *p_number = &number; 

而第二個像:

int *p_number; 
p_number = &number; 

我不知道爲什麼第一種方式看起來像它看起來,因爲我得到的p_numberint *p_number的地址,我們基本上給p_number的地址number&運營商。但爲什麼我們初始化*p_number&number?那不就是說p_number的指針是數字的地址嗎?

回答

7

我相信有什麼困惑,你是語法

int *p_number = &number; 

好了,你可以把它改寫爲

int* p_number = &number; 

是相同

int *p_number; 
p_number = &number; 

第一個居然是定義和初始化的組合步驟。

+2

同意。這是我希望主要語法爲「」的一個重要原因,其中'int *'是'行爲'定義,'p_number'是名稱定義。 – antiduh

+0

非常混亂的風格。這是爲什麼?我沒有看到爲什麼*的名稱而不是類型的原因。 – Goldi

+1

@DennisvonEich實際上,它不是什麼,你可以自由地使用任何適合你的風格。你知道,人們有不同的意見。 :) –

0
int *p_number = &number; 

這包括兩個部分:一個p_number declartion,隨後其初始化= &number(讀作「是數的地址」)。

int *p_number; 
p_number = &number; 

這是一樣的,但在概念上有點不同。第一行是聲明(與前面的例子相同)。第二行是Assigment,這是一個聲明。

3

只有第一個是初始化指針。第二個創建一個未初始化的指針,然後爲其分配一個值。它們的效果是一樣的(你有一個指向特定事物的指針變量),編譯器生成的代碼可能是相同的。

似乎令你感到困惑的是,聲明和初始化器的語法與賦值語法有細微的差別。特別是,*在聲明中意味着你聲明瞭一個指針並且不是解引用它,而在表達式中,*意味着你的解除引用。這種微妙的差別被別人認爲是一個疣和一個特徵。