指针和引用都是一种复合类型。
复合类型: 基于其他类型定义的类型
基本数据类型+声明符
引用并非对象,而是一个别名,定义时必须初始化
// 引用并非对象,而是一个别名 int ival =1024; int &refVal = ival; // refVal 指向ival(是ival的另一个名称) int &refVal2; //报错:引用必须被初始化 int i =1024, i2=2048; int &r=i, r2=i2; //r是一个引用;r2 是 int int &r3 = i3, &r4 =i2; // r3和r4都是引用
指针: 本身就是一个对象,允许指针的赋值和拷贝。
定义时无须初始化
double dp ,*dp2; //dp2是指向double型对象的指针,dp是double型对象。 int ival = 42; int *p = &ival; //p存放变凉ival的地址。
指向指针的引用
引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,因此存在对指针的引用。
int i =42; int *p; int *&r = p; // r是指针p的引用(r是p的别名) r = &i; // 此时,p也指向i *r =0; // 此时 i为0
const
// 1、 const int buf=512; buf =512; // const 对象不能被写值 const int i = get_size() ; //正确:运行时初始化 const int j = 42; //正确: 编译时初始化 const int k; //错误: k是一个未经初始化的常量 // 初始化 int i =42; const int ci = i; //正确: i的值被拷贝给了ci int j = ci; //正确: ci的值被拷贝给了j // 默认状态下,c onst对象仅在文件内有效 // file_1.cc 定义并初始化了一个常量, 该常量能被其他文件访问 extern const int bufsize = fcn(); // file_1.h 头文件 extern const int bufSize; // 与file_1.cc中定义的bufsize 是同一个
const int ci = 1024; const int &rl = ci; //正确: 引用及其对应的对象都是常量 r1 = 42; // 错误: r1是对常量的引用 int &r2 = ci; // 错误: 试图让一个非常量引用指向一个常量对象。
const int * 和 int * const
//const int *p和int const *p是相同的 const int *p; //p所指向的变量值不能被修改。(*p)是const int *const p; //表示一旦得到了某个变量的地址,不能再指向其他变量