2017-05-29 86 views
1

目前我正在讀一本關於C指針並沒有在書中,混淆我舉一個例子:內存用C關於指針運算

假設我們有:int arr_of_int[] = {5,10,15}; 我們設置:int *add_of_arr = arr_of_int;

那麼我就知道了「add_of_arr」變量保存的地址:arr_of_int[0]; ,讓我們只是假設的「add_of_arr」的地址是500

現在,如果我做的:「add_of_arr += 3;」,那麼「add_of_arr」的地址現在是512?這就是我從書中得到的,但是不應該將「add_of_arr」的地址仍然是500,只有add_of_arr的HELD地址是512?我從書中得到的是,add_of_arr的地址正在改變。這讓我困惑。我認爲這是一個錯誤,但我不確定。

謝謝!

+0

爲什麼你要關心的地址地址?是的,這是明確的,是的,有些情況甚至有用,但你還沒有。特別是,你似乎在討論'int ** add_of_add_of_arr =&add_or_arr'爲500. – MSalters

+0

我很困惑,爲什麼「&add_of_arr」正在改變,而不是「add_of_arr」,但它看起來像一個錯字。 –

+0

正確地閱讀我們的假設是書面的,你是對的,這本書是錯誤的。發現得好!也許你應該得到一本更好,更精確的書。只是:int不保證有4個字節。它可以是1(!)以內的任意大小。另外,如果'addr'的地址(使用更好的名字!)是'500','array'的地址也不能是'500',所以遞增後的值不能是'512'(假設'sizeof(int )== 4U')! – Olaf

回答

3

這是一個錯字:在 add_of_arr地址現在512,但 add_of_addr的地址並沒有改變。

0

你混淆兩件事:一個指針是一個變量來存儲內存 地址。作爲一個變量,它也有自己的地址,它駐留在內存中。至於你說的,讓這成爲500 表達add_of_arr=arr_of_int因此拷貝的 arr_of_int[0] 500現在假設地址到內存中的位置,arr_of_int是 內存位置400。然後add_of_arr=arr_of_int保存400到內存位置500後add_of_arr += 3指針在存儲單元500包含412 地址add_of_arr(由&add_of_arr獲得)但仍然是500,但它的價值(由add_of_arr獲得)已經從400改爲412

+0

看起來更像是這本書的作者感到困惑。 OP是正確的! – Olaf