复合类型中引用和指针的学习

今天开始学习C++,立志做精通python和C++的复合型人才,为一年后的就业做准备。
总结一下引用和指针。

引用

我们常常使用的引用是左值引用,即定义是这样的形式

int a = 42;
int &d = a;

引用并非创建一个新的对象,引用对象d和被引对象a具有相同的内存地址。修改其中一个,另一个也会被修改。也就是说,引用也是变量的别名,被引对象和引用对象其实是一个玩意,引用也不是对象。所以引用必须初始化,因为引用对象产生于已存在的对象。一个变量一旦作为另一个对象的别名,就没法重新引用别的变量了
以下使用引用的方式是错误的:

int & d = 10; 引用的初值必须是对象,不能是字面值常量。
double a = 3.14;
int &b = a; 引用类型需要和被引对象一致。

指针

指针是对象,可以重新赋值(意思是可以不从一而终,能始乱终弃)。指针保存的是所指对象的地址,在定义时无需赋初值,如果不赋初值,指针保存的也是不确定的值。一般如果没想好指针该指向什么变量,可以赋nulllptr。

double dval ;
double * a = &dval;

指针同样要求类型匹配。指向什么类型的指针,就必须用什么类型的指针定义。
指针该有四种状态:

  • 指向一个对象
  • 指向紧邻对象所占空间的下一个位置
  • 空指针
  • 无效指针(野指针)

使用解引用符* 来访问指针指向的对象

*a == dval

空指针的使用方法有以下两种:

int *a = nullptr;
int *a = 0;

如果想让指针用一个非零数值型常数,将报错。

int *a = 42;

或者想让指针指向一个常量,也将报错。

int *a = &42;
//表达式必须为左值或函数指示符

指针可以 被当做判断条件用。如果指针指向某个变量,则该指针用作条件为true

你可能感兴趣的:(C++)