我正在嘗試獲取不允許直接參考的值的地址。
int main() {
int a = {1, 2, 3, 4};
int* ptr = &arr[0];
// ptr is incremented an unknown number of times
}
在指標移動了未知次數后,我需要知道指標指向的值的地址。假設 *ptr 現在是 3,我需要知道 3 的地址而不參考陣列。可能嗎?
uj5u.com熱心網友回復:
地址必須指向物件或函式,因此也稱為指向物件或函式的指標。讓我們將您的問題解構為前提:
1/您有一個int,只有一個(不是陣列)帶有額外的(錯誤的)初始化程式。這有點奇怪。也許你的意思是int a[] = /* ... */。在此注釋中,沒有3存盤,因為您在此物件中只有一個值的空間。
2/你有一個指向int物件的指標,它被呼叫ptr并被初始化為&a[0],這是一個參考操作&a與一個取消參考操作 ( [0]) 相結合;這些操作相互抵消,因此您的ptr宣告實際上等同于int *ptr = a;,這也是錯誤的。也許您的意思是int *ptr = &a;,或者假設您更正了a(根據第 1 點)的宣告,那么您的代碼(或速記版本,沒有不必要的取消參考 參考)是可以的。
我需要知道指標指向的值的地址。
如前所述,指標不指向值。它們指向物件或函式(或者什么都沒有或垃圾,這兩個例外都與這個問題無關)......并且地址是指向物件或函式的指標,所以如果你有一個指向你已經擁有的物件的指標地址。
假設 *ptr 現在是 3,我需要知道 3 的地址而不參考陣列。
您已經有了 address,并且您正在取消參考它 ( *ptr) 以獲取值;ptr 正在存盤地址,對嗎?這就是為什么 Jonathan Leffler 評論將這個問題描述為同義詞;您取消參考以獲取值的指標也是(根據定義)您打算存盤的物件的地址3。
您的困惑很常見,并且(在您一定要問的其他常見困惑中)最好用一本像樣的教科書來糾正,例如 K&R2e(當你偶然發現它們時做練習)。或者,實際上有數百個常見問題。您可以閱讀 220 多頁,這比提出所有這些問題并相信所有答案更快、更可靠……
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/513299.html
標籤:C记忆
上一篇:函式未正確地將變數遞增1
