繁体   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