自述:
PS:我已尽力以最简单的方式解释这个论点, 我在这里看到了许多其他主题,但在我看来 他们中的任何一个都正确地解释了这一点我知道这个论点已被传递了许多,很多很多很多[for 我< 9000打印:很多次,但这次我(想)已经得到了 因此,我想要做的就是揭露我的结论 纠正如果我错了。如果您愿意,可以标记此问题 未来的读者,也许在某种初学者部分,我会尽力做到 简短。
Pointers and References almost do the same things, BUT, they are
basically (physically) DIFFERENT.
POINTER:
Pointers ARE VARIABLES及其OWN地址,可以保存其OWN值。
请看这个片段:
int nInt=99; //address of variable nInt 000D893F
int* pPointer; //address of variable pointer 000C751C
pPointer= &nInt; /*
* address of &pPointer: 000C751C &just returns the address of
* value of pPointer: 000D893F
* value pointed by *pPointer: 99
*/
参考:
引用不是变量,它们只是ALREASES到ALREADY EXISTING变量
更清楚:当你对一个变量(es。int nX=5
)进行delcare时,你会在堆栈中的某个地方分配一些内存(4字节),假设它的地址为000C763C
。
现在想象一下这个变量就像一个盒子里面的值(5
),这个盒子是以你的CPU 000C763C
命名的,但在你的程序中称为nX
。
当您执行以下操作时:
int &nAlias = nX
你对你的编译器说:嘿看看这个变量(address of nX
),它的名字不仅是nX
而且nAlias
,这些名字是完全相同的内存单元格,相同的内存地址,相同的变量,所以这意味着它必须已经创建(在创建引用之前!),这意味着nAlias
没有自己的地址也不能包含自己的值,它只是同一个名称记忆细胞!
现在想象一下,我们的框由您的CPU调用000C763C
(nX
),其内部值为5
,编译器已知其名称为nX
或{{ 1}},完全相同的存储单元!
所以我猜它只被编译器pourposes使用。 (我只是猜测,我希望在答复中)
如果我是对的,我希望很多人在这里要求它能更清楚地了解这些事情到底是什么,你的其他知识会更容易......
最后一个个人意见,我不知道为什么几乎所有我读过的书或教程,在解释这些论点之前并没有用这个简单的方式解释什么是指针和参考,我看到人们生气明白这么简单但棘手的想法...
我希望我做得很好!