[问题] 想厘清指标(pointer)与参考(reference)

楼主: ptter0619 (我是一颗秋天的树)   2019-05-03 06:15:57
问题(Question):
最近刚开始自学程式语言
C语言的指标和参考(头疼啊~)
就以我的理解是以下:
1.int *p;
意指 p是一个指向另一个整数变量的内存位置的整数指标变量
2.
int m = 0;
int &n = m;
意指 n是m的别名(alias),也就是说n代表m这个变量
3.问题:
如下方网址之程式码
跑出的结果如下附图

前三行是
iptr = 0x7ffc59161654
&iptr = 0x7ffc59161658
*iptr = 5
想请问第二行&iptr的内存位址与iptr内存位址,为什么会不一样?
而&是取址,*是取值,
因为&iptr是“iptr所指向的内存位址”的参考,
也就是&iptr是iptr的别名?
而这个别名&iptr变量在另一个内存的位置储存在0x7ffc59161658
与iptr本名储存在内存的位置不同,
而&iptr的内存“内容”则是记录了iptr指向“i”的内存位置,
因此,&iptr在内存0x7ffc59161658
所存的内容为0x7ffc59161654 ?
是这样理解的吗?
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://ideone.com/rWF65Z
补充说明(Supplement):
作者: firejox (Tangent)   2019-05-03 07:19:00
存内存位址是需要空间的,&iptr是iptr的位址,iptr是指向内容的位址就像i = 1,&i是存1空间的位址,i则是1。指标只是把内容换成位址而已
作者: sarafciel (Cattuz)   2019-05-03 09:08:00
C语言没有参考这个东西 C++才有 你看到的&是取址运算子
作者: KaryuuIssen (一闪)   2019-05-03 11:39:00
应该理解为&在宣告时才做为参考 否则是取址int &x = y; x是y的参考 int *p = &x; p指向x的位址
楼主: ptter0619 (我是一颗秋天的树)   2019-05-04 09:56:00
以上我明白了 应该说指标变量也需要在内存里找一块来放,所以指标变量的储存位置和指标变量所指到的内存位址是不一样的

Links booklink

Contact Us: admin [ a t ] ucptt.com