簡體   English   中英

如何獲取指針指向 C 中的值的地址?

[英]How do I get the address of the value that a pointer is pointing to in C?

我正在嘗試獲取不允許直接引用的值的地址。

int main() {
  int a = {1, 2, 3, 4};
  int* ptr   = &arr[0];
  // ptr is incremented an unknown number of times
}

在指針移動了未知次數后,我需要知道指針指向的值的地址。 假設 *ptr 現在是 3,我需要在不引用數組的情況下知道 3 的地址。 是否可以?

地址必須指向 object 或 function,因此也稱為指向 object 或 function的指針。 讓我們將您的問題分解為前提:

¹/ 你有一個int ,只有一個(不是數組)帶有額外的(錯誤的)初始化程序。 這有點奇怪。 也許你的意思是int a[] = /*... */ 在這一點上,沒有存儲3 ,因為在這個 object 中你只有一個值的空間。

²/ 你有一個指向int object 的指針,這被稱為ptr並且它被初始化為&a[0] ,這是一個引用操作&a結合一個取消引用操作( [0] ); 這些操作相互抵消,所以你的ptr聲明實際上等同於int *ptr = a; ,這也是錯誤的。 也許你的意思是int *ptr = &a; 或者,假設您更正了a的聲明(根據第 1 點),那么您的代碼(或簡寫版本,沒有不必要的取消引用+引用)是可以的。

我需要知道指針指向的值的地址。

如前所述,指針不指向值; 它們指向對象或函數(或者什么都沒有或垃圾,這兩個異常與這個問題無關)......地址是指向對象或函數的指針,所以如果你有一個指向 object 的指針你已經有了地址

假設 *ptr 現在是 3,我需要在不引用數組的情況下知道 3 的地址。

您已經有了 address ,並且正在取消引用它( *ptr )以獲取值; ptr正在存儲一個地址,對嗎? 這就是為什么 Jonathan Leffler 評論說這個問題是同義反復的; 您取消引用以獲取值的指針也是(根據定義)您打算存儲 3 的 object 的地址

您的困惑很常見,並且(在您一定會問到的其他常見困惑中)最好通過一本像樣的教科書來糾正,例如 K&R2e (在您偶然發現它們時進行練習)。 或者,實際上有數百個常見問題; 您可以閱讀 220 多頁,這比提出所有這些問題並相信所有答案更快、更可靠……

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM