有关指针

时间:2016-02-07 18:10:37

标签: c++

我只是在学习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个。为什么会这样?我知道第一个地址是变量鱼,但不能理解第二个地址。这只是垃圾价值吗?

3 个答案:

答案 0 :(得分:1)

&fishpointer是指针的地址。

查看指针指针:

http://www.tutorialspoint.com/cprogramming/c_pointer_to_pointer.htm

答案 1 :(得分:1)

第二个值是变量fishpointer的地址。

编译器决定将两个变量放在内存中,这就是为什么它们的地址非常相似。该语言并不能保证会发生这种情况 - 如果您启用优化,您甚至可能会看到不同的行为。

答案 2 :(得分:1)

指针是一个值(对象所在的内存中的地址)。但fishpointer是一个变量(其类型恰好是包含指针值的变量)。

因此,您可以将fishpointer的地址与&一起使用,它会为您提供包含fish地址的变量的地址。

由于fishfishpointer是两个局部变量,编译器将它们都放在堆栈中,在这种情况下它们最终彼此相邻(内存中变量的确切布局是实现依赖)。在您的平台上,似乎每个指针都是4个字节 - 因此变量地址的四个字节不同。