考虑下面的声明:
int n = 5, *p = &n, &r = n;
在这个声明中,变量p声明为类型int *,它是一个指向整数的指针;r的类型为int &,即整数引用变量。引用变量必须在声明中初始化为一个特定变量的引用,而且这个引用不能改变。这也意味着引用变量不能为空。引用变量r可以看作是变量n的别名,如果n改变了,r也跟着改变。这是由于引用变量实现为指向变量的常量指针。
除了声明
int &r = n;
之外,还可以使用下面的声明
int *const r = &n;
其中,r是一个指向整数的常量指针,它意味着下面的赋值
r = q;
是错误的,其中q是另一个指针,因为r的值不能改变。然而,如果n不是一个整数常量,赋值
*r = 1;
是可以接受的。
注意类型int *const与类型const int *的区别。后者是一个指向整数常量的指针类型:
const int *s = &m;
执行该语句后,下面的语句
s = &m;
是允许的,其中m是一个整数(可以是常量,也可以不是),但是即使m不是一个常量,赋值
*s = 2;
也是错误的。
Leave A Comment