1、指针
(1) 指针定义:加前缀*。
(2)指针使用:
不加前缀表示指针本身,即物理地址;加前缀*表示解引用,即取物理地址指向的东东,根据指针类型是INT还是DOUBLE等来解引用,因为不同类型所占长度不同。
当要仅仅只对不同类型的指针变量所指向的物理地址进行比较时,除函数指针外使用void*类型,因为不需要知道变量长度,只需要比较物理地址。
(3)取地址操作:加前缀&,
2、引用
(1) 引用又叫别名,既然是别名,那么引用应等同于所指向的对象使用。定义形式如下
类型名 & 对象名
之所以称为别名是因为它初始化后,可以当作被初始化的对象来使用。
(2) 引用在定义时必须被初始化
int x=1;
int &y ;//错误没有初始化
int &y=x;//正确
int&z=&x;//错误,在这个定义中引用并没有指向指针类型的对象而是指向int类型的对象
(3) 引用一经定义,不会再指向其它对象
int x1=1;
int x2=2;
int &y=x1;
y=x2;//结果是x1=2,而不是y指向了x2,成为了x2的别名。
(4) 指针与引用
int x1=1;
int x2=2;
int &y=x1;//定义一个引用,成为x1的别名
int *z=&x1;//定义一个指针,该指针指向x1
int *w=0;
w=&x1;//定义一个指针,指向x1
(5) 关于const和引用的联合使用
①同一类型的值,但涉及运算
int x=1;
const int &y=x+10;//定义一个const引用y,其值为x+10 。
②不同类型的值和不可寻址的值:
double x=1;
const int &y=x;
形成了一个隐含的临时对象,但程序员不能访问它。
编译器转化其为:
double x=1;
int temp=x;
const int &y=temp;
幸亏定义的是const引用,如果这样写:
int &y=x;//则用户改变了y的值,实际上在改变临时对象的值。
③按本人理解,不知道对否????
在①中,如果改为:
int &y=x+10;
则编译时也会生成一个临时对象
int temp=x;
const int &y=temp+10;
④引用指向一个指针类型的对象
const int x=1;
int *&y=&x;
//错误,因为定义了一个引用,且该引用是一个指针的别名,即该引用指
//向指针类型的对象,但定义该指针指向的对象可以修改,而实际指向一个常量。
Const int *&y=&x;
//错误,虽指针指向的对象不能修改了,但y作为一个指针类型的别名,其本身(即指针或
//地址)可以修改。x为const对象,其值和在内存中的地址都不能修改,如果不使用引
//用,改为 cont int*y=&x;即为正确的,既然用了引用,y做为指向x的指针的别名,那么
//对y的修改就是对x的地址的操作,而x的地址不能改变。
Const int * const&y=&x;//正确,x的值和地址都不会改变。
C++ 学习心得(指针与引用)
最新推荐文章于 2022-04-08 17:24:56 发布