指针地址的含义是什么?

时间:2016-03-12 05:25:51

标签: c++ pointers memory-address

如果我们有代码:

int b = 10;
int* a = &b;
std::cout << a << " " << &a << " ";

结果,地址不同。

但指针的地址含义是什么?

指针具有变量地址的值,因为我们在内存中有变量。但是我们没有存储在内存中的地址值,为什么我们有地址的地址呢?

也许我有一些误解,谢谢你的帮助。

4 个答案:

答案 0 :(得分:3)

std::cout << a << " " << &a<<" ";

是的,两者都不同。

1。 a已分配b的地址,因此会打印b的地址。

2。 &a打印指针a本身的地址。

ab的地址不同。

与此示例类似(理解) -

int b=9;

如果您打印b,则会获得其值9,但如果您打印&b,则会获得其地址,而且它们不会相同。

指针的情况也是如此。

  

指针具有变量地址的值,因为我们在内存中有一个变量。但是我们没有存储在内存中的地址值,为什么我们有地址的地址?

我们声明一个变量(指针,数组,只是intchar)这些变量都在程序中声明并存储在内存中。由于它们存储在内存中,因此它们具有唯一的地址。

答案 1 :(得分:3)

请记住,您机器上的地址本身就是32或64位值(取决于您的系统架构)。

在您的示例中,您有一个整数b,它将值10存储在某个地址中,让我们将其称为地址500

然后你有一个指针a,它存储值500,IT有自己的地址。

重点是什么?你实际上可以有双指针(或更多)。

你理解

char* string = "hello";

string是指向字符数组开头的指针

然后

char** strings;

是指向char *的指针。例如,这就是你如何做一个阵列数组。

答案 2 :(得分:1)

  

指针具有变量地址的值

我假设变量表示与变量对应的对象。尽管如此,这并不完全正确,而且我们开始在地址指针值之间进行区分是边缘条件。

指针值根本没有指向对象。例如,考虑空指针。

根据定义,地址指向对象......或函数。

  

指针地址的含义是什么?

如果您可以想象一个声明存储指针的变量(例如T *var;)并且您获取它的地址(&var,那么指针的地址是有意义的)。

  

为什么我们要有地址?

地址是一种指针值,但指针值不指向值;他们指向对象或功能。 &aa不同,因为两个指针指向不同的对象;一个点位于a,其他点位于b

答案 3 :(得分:0)

谢谢你,我知道它有什么问题。

事实上我在int* a = &b;内存中创建了一个指针,但我认为我不是这样,这是我的错误。

但我认为你不能输出内存中不存在的东西的地址,如cout<<&(&a),编译器会告诉你“&amp;”运算符需要一个l值变量。

如果你想将指针的地址输出到a,你可以定义指向变量int **p2p=&a的指针,然后你可以cout<<&p2p,它可以工作。