如何在C中获取指针指向的值的地址

  • 本文关键字:地址 指针 获取 c memory
  • 更新时间 :
  • 英文 :


我正在尝试获取一个不允许直接引用的值的地址。

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

指针移动了未知次数后,我需要知道指针指向的值的地址。假设*ptr现在是3,我需要在不引用数组的情况下知道3的地址。有可能吗?

地址必须指向对象或函数,因此也称为对象或函数的指针。让我们把你的问题分解为前提:

你有一个int,只有一个(而不是数组(带有额外的(错误的(初始化程序。这有点奇怪。也许你的意思是int a[] = /* ... */。注意,没有存储3,因为此对象中只有一个值的空间。

²/你有一个指向int对象的指针,它被称为ptr,它被初始化为&a[0],这是一个引用操作&a和一个去引用操作([0](;这些操作相互抵消,所以ptr声明实际上相当于int *ptr = a;,这也是错误的。也许您的意思是int *ptr = &a;,或者,假设您更正了a的声明(根据第1点(,那么您的代码(或简写版本,没有不必要的取消引用+引用(就可以了。

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

如前所述,指针不指向值;它们指向对象或函数(或者什么都没有或垃圾,这两个问题都与此无关(。。。地址是指向对象或函数的指针,因此如果您有一个指针指向对象,那么您就已经有了地址

假设*ptr现在是3,我需要知道3的地址,而不需要引用数组。

您已经有了地址,您正在取消引用它(*ptr(以获得值;ptr正在存储地址,对吗?这就是为什么Jonathan Leffler评论将这个问题描述为同义词;您为获得值而取消引用的指针(根据定义(也是您打算存储3的对象的address

你的困惑是常见的,(在你一定会问的其他常见困惑中(最好用一本像样的教科书来纠正,比如K&R2e(当你偶然发现它们时做练习(。或者,实际上有数百个常见问题;你可以阅读220多页,它会比问所有这些问题并相信所有答案更快、更可靠。。。

最新更新