我只是在学习c ++中指针的概念。根据我的研究,我了解&
用于查找变量的内存地址。我想问一下是否还有指针的内存地址。看看下面的代码
#include <iostream>
using namespace std;
int main() {
int fish=5;
int *fishpointer=&fish;
cout << fishpointer << endl;
cout << &fishpointer << endl;
return 0;
}
以上运行代码打印以下内容
0x7fff64cc1f14
0x7fff64cc1f18
每次我运行它时,地址都会改变,但第二个地址是我认为比第一个地址多4个。为什么会这样?我知道第一个地址是变量鱼,但不能理解第二个地址。这只是垃圾价值吗?
答案 0 :(得分:1)
&fishpointer
是指针的地址。
查看指针指针:
http://www.tutorialspoint.com/cprogramming/c_pointer_to_pointer.htm
答案 1 :(得分:1)
第二个值是变量fishpointer
的地址。
编译器决定将两个变量放在内存中,这就是为什么它们的地址非常相似。该语言并不能保证会发生这种情况 - 如果您启用优化,您甚至可能会看到不同的行为。
答案 2 :(得分:1)
指针是一个值(对象所在的内存中的地址)。但fishpointer
是一个变量(其类型恰好是包含指针值的变量)。
因此,您可以将fishpointer
的地址与&
一起使用,它会为您提供包含fish
地址的变量的地址。
由于fish
和fishpointer
是两个局部变量,编译器将它们都放在堆栈中,在这种情况下它们最终彼此相邻(内存中变量的确切布局是实现依赖)。在您的平台上,似乎每个指针都是4个字节 - 因此变量地址的四个字节不同。