我正在阅读C++ Primer
,我注意到有一个声明说:
因为引用不是对象,所以它们没有地址。因此, 我们可能没有定义指向引用的指针。
但我刚写了一个示例代码,并表明可以创建一个指向引用的指针(d
变量)。
代码发布在下面:
#include <iostream>
using namespace std;
int main(){
int a = 1024;
int &b = a; // a reference to int
int &c = b; // a reference to another reference
int *d = &b; // a pointer to a reference
int *(&e) = d; // a reference to a pointer
a = 100;
cout << b << endl;
cout << c << endl;
cout << *d << endl;
cout << *e << endl;
}
那么,我的测试有什么问题吗?或者C++ Primer
中的陈述是错误的?
我正在阅读C++ Primer
第五版。该声明见第52页,2.3.2。
答案 0 :(得分:9)
引用是对的,因为你的指针指向原始对象,而不是它的引用。下面的代码显示了这个事实:
#include <stdio.h>
#include <stdlib.h>
int main() {
int a = 0;
// two references referring to same object
int& ref1_a = a;
int& ref2_a = a;
// creating a different pointer for each reference
int* ptr_to_ref1 = &ref1_a;
int* ptr_to_ref2 = &ref2_a;
printf("org: %p 1: %p 2: %p\n", &a, ptr_to_ref1, ptr_to_ref2);
return 0;
}
输出:
org: 0x7fff083c917c 1: 0x7fff083c917c 2: 0x7fff083c917c
如果你说你能够制作一个参考指针,那么上面的输出应该是不同的。
答案 1 :(得分:7)
这本书的内容是正确的。你的指针指向a,而不指向引用本身(b),因为引用本身(b)在内存中不存在,因此没有地址。
答案 2 :(得分:5)
不,你不能指向一个引用。如果您在其上使用地址运算符&
,则会获得您引用的对象的地址,而不是引用本身。
答案 3 :(得分:0)
将引用视为原始对象的别名。引用不分配,dealloc内存。正如已经指出的那样,您可以指向别名引用的对象,但内存中没有任何内容可以表示别名本身(它仅在代码中)。相反,指针分配内存并存储一个值(即使该值为NULL)。