2014-07-16 111 views
0
int num1 = 8; //okay 
int *pointer; //okay 
*pointer = &num1; //NOT okay, compiler says (Error:a value of type int* cannot be 
        //assigned to an entity of type "int") 

int num2 = 8; //okay 
int *pointer = &num2; //okay 

我很困惑,爲什麼第一部分給出了一個錯誤,第二部分犯規,他們看起來是一樣的我C++指針聲明和分配

+2

將其更改爲'pointer =&num1',因爲'pointer'的類型是'int *',而'num1'的類型也是'int *'(而'* pointer'的類型是'int' )。 –

+5

'*'和'&'具有不同的含義,具體取決於上下文。在一個聲明中,它們表示指針類型和引用類型,在表達式中它們是運算符的取消引用和地址 – bolov

+0

'int * pointer = X;'表示:int *指針;指針= X;' –

回答

0

運營商&給出了一個指針變量,在其上作用。
&num1是指向int(因爲num1具有類型int),其指向地址num1

4

在賦值語句:

*pointer = &num1; //NOT okay 

*pointerpointer點,類型int&num1的是int*類型的num1地址,值。正如編譯器所說的,你不能將一個指針指定給一個整數。

pointer = &num1*pointer = num1都會很好,這取決於您是要修改指針本身還是指向它的值。

在宣言:

int *pointer = &num2; //okay 

儘管外觀相似的賦值語句,這個初始化pointer*pointer。它聲明pointer是與&num2相同類型的指針int*

1

在第三行刪除*。它返回當前存儲在變量指針中的位置/地址處存儲的值,並將其解釋爲int。

0

錯誤消息非常明確:表達式*pointer的類型爲int,表達式&num1的類型爲int*。這兩種類型不兼容(您嘗試將指針指定給非指針)。

在指針上使用取消引用操作符*時,會得到指針指向的內容,並且如果使用操作符&的地址,則會得到某個地址(即指向某個地址)。

爲了pointer指向一個變量,然後就分配給它:

pointer = &num1; 
0
int *pointer = &num2; 

相同

int *pointer; 
pointer = &num2; 

int *pointer; 
*pointer = &num2; 
0

以下是更多的是一般的描述而不是直接回答你的問題......

如果你聲明某種類型的變量,那麼你也可以聲明另一個指向它的變量。

例如:

int a;

int* b = &a;

有兩種方式來 「看」 變量b(這是可能混淆了大多數初學者)

  • 你可以考慮b作爲變異能夠類型int*

  • 您可以考慮*b作爲int類型的變量。

因此,一些程序員會宣佈int* b,而其他人則宣稱int *b

但事實是,這兩個聲明是相同的(空間是沒有意義的)。

您可以使用b作爲指向整數值的指針,或使用*b作爲實際的指向整數值。

您可以讀取指向的值(例如,int c = *b)並寫入指定的值(例如,*b = 5)。