请教高手C++中的指针、引用、常、对象

来源:百度知道 编辑:UC知道 时间:2024/05/14 16:43:14
首先声明一下,我也是按照大家的习惯:指针就是指针变量。

T1、谭浩强教授讲:“可以将变量的引用的地址赋给一个指针变量”,“但是不能定义指向引用类型的指针变量”。
我理解不了这两句话,总觉得相互矛盾,而且我觉得指向引用(类型)的指针变量就应该拿引用的地址初始化啊?
虽然引用并不是一个独立的变量,也不单独分配存储单元,但是引用与变量共享同一存储单元,地址也是相同的。
因此,引用也就是一个(不独立的)变量,就应该可以定义……难道“指向引用”跟“指向引用类型”不一样?

T2、除了对象的指针,对象的常指针,常对象的指针,有没有常对象的常指针?如何定义?和使用?

T3、是不是对象的常引用也叫做常对象的指针?也就是说两者定义方式相同,其实根本就是一回事?

T4、那还有没有常对象的常引用?又是如何定义?和使用?

主要还是第1个问题,大师救救我吧,拜谢!
T3弄错了,我本来想问对象的常引用是不是也叫做常对象的引用?

1、对变量的引用取地址,相当于对被引用的变量取地址,例如:
int ival;
int & iref = ival;
int * iptr_1 = &ival;
int * iptr_2 = &iref;
则有iptr_1 == iptr_2。
我们不能定义指向引用类型的指针变量,这是说,不能像这样定义:
int & * iref_ptr = &iref; // 错误的类型定义
事实上这里初始化式&iref也只不过是一个int*类型。

2、const对象的const指针可用于函数参数传递。例如:
void foo(const int * const p)
{/* ... */}
函数里面用起来和const类型的引用差不多,所以一般也只用引用的用法。上面的用法是合法的,但实用价值不大。
注:声明的语法,const修饰紧靠其前的类型,如果const前面没有类型,修饰后面的类型。例如const int*与int const *是一种类型,但与int * const不同。

3、语法和概念不同,但应用价值差不多。见2。

4、没有这个概念,因为引用一旦定义指向某变量,就不能改变,这与指针有本质不同。

建议去读《C++ Primer》,老谭的书其实不咋样。