c++(4)----指针和引用、const

  指针和引用都是一种复合类型

  复合类型: 基于其他类型定义的类型 

       基本数据类型+声明符

引用并非对象,而是一个别名,定义时必须初始化
// 引用并非对象,而是一个别名
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;  //表示一旦得到了某个变量的地址,不能再指向其他变量

猜你喜欢

转载自www.cnblogs.com/feihu-h/p/12238679.html