2015-10-14 57 views

回答

0

*cDecay c to pointer-to-first-element,並訪問指向的值。與c[0]相同。
(int) *c→將該值轉換爲int
*p = (int) *c→將其分配給p指向的內容。

+0

但是當你說* c ...它是一個數組。那麼它總是指向第一個索引? –

+0

So * c表示指向數組第一個索引的內存位置的指針? –

+0

數組是數組,而不是指針。數組不指向任何地方。但是,一個數組可以衰減爲指向數組中第一個元素的指針,就像'*'解除引用運算符應用於數組名時發生的情況一樣。因此'* c'的值是數組的第一個元素,並且與寫入'c [0]'相同。 – emlai

1

讓我們來分析一下:*p = (int) *c;

c是一個字符數組。

*c是char數組的第一個元素,因爲c[0] = *(c+0) = *(c) = *c

(int) *c連鑄char數組c的第一個元素爲整數。這是必需的,因爲...

*p = (int) *c您將一個整數鑄造字符分配給指針p的內容。

1

此代碼不起作用,否則會導致問題。

該行; p = nums [2];

將指針p的值設置爲值9.這不可能是指針的合法值。如果是,則存儲位置9將被設置爲115,這是's'的整數值。

+0

我的意思是設置p =#[2] –

0

這段代碼有很多問題,我們先來解決它們。

  • 首先,main(void)是不符合的代碼。您需要將其更改爲int main(void).

  • 其次,p = nums [2];是錯誤的。 p的類型爲int *,而nums[2]的類型爲int。您不得將int指定爲int *,並期望取得豐碩的成果。也許你想寫的是p = &nums[2];。沒有這個修改,進一步將調用undefined behavior,因爲您將嘗試訪問內存位置無效的到您的程序。

然後,來到你的問題,

*p = (int) *c; 

它基本上取消引用c注:來獲取值,然後將其轉換爲int類型和存儲到由p指向的內存位置。但是,在C中,此投射不是必需的。以上聲明相當於

*p = *c; 

無論如何。


注:陣列名稱衰減到的指針數組,即,在該代碼的第一個元素,採用c相同&c[0],大致。