c++引用和指针

引用

引用必须初始化。
int a=1;
int &ref=a;
无法将引用重新绑定到另一个对象。
定义引用后对引用的操作都是在绑定的对象上进行的。因为引用本身不是对象,所以不但能定义引用的引用。
引用的类型要和绑定的对象的类型一致,引用只能绑定到对象上,不能与字面值或某个表达式结果绑定。

指针

指针本身就是一个对象,允许赋值和拷贝,而且指针在生命周期可以先后指向不同对象。
和内置类型一样,无需在定义时赋初值。
int a=1;
int *p=&a;
p存放a的地址,p是指向变量a的指针。
指针类型要和指向的对象的类型一致。

利用指针访问对象

指针指向对象,允许使用解引用符(*)访问该对象。
*p=1;

空指针

把指针指向nullptr,0,NULL都可以得到空指针。在c++11的新标准下,尽量使用nullptr,避免使用NULL。
将int 变量直接赋值给指针是错误的,即使是值为0的int变量,不等于空指针。
墙裂建议初始化所有指针,nullptr和0都可以。
赋值(=)永远改变的是等号左侧的对象。
指针指向0为空指针,在条件表达式中为false。指向不为空,条件表达式为true。
指针指向:1:指向某对象;2:指向对象的下一个地址;3:指向0;

void*指针

特殊的指针类型,可存放任意对象的地址。
不能直接操作void*指针所指的对象,因为需要根据对象的类型判断空间。
int *p,*紧跟指针强调变量具有的复合类型。
int* p*紧跟int强调定义了一种符合类型。

指向指针的指针

指针是内存的对象,也有地址,允许将指针的地址再存放到另一个指针当中。

指向指针的引用

int i=1;
int *p;
int *&r=p;
r=&i;
*r=0;
从右向左阅读r定义,离变量名最近的符号决定变量类型。

const限定符

任何对const常量赋值都会引发错误。
const对象一旦创建值不能改变,所以必须初始化。
const常量可以用非const初始化。
非const也可以用const常量初始化。
const对象仅在文件内有效,多个文件中的同名的const变量等同于不同文件中分别定义的独立的变量。如果想在一个文件中定义,多个文件中声明并使用,需要添加extern关键字。

const的引用

对常量的引用。引用的对象是常量const。
int i=1;
const int &r=i;合法,允许将const int&绑定到普通int对象。
int &r2=r;不合法,r2是非常量引用。

指针和const

允许一个指向常量的指针指向一个非常量对象。
int i=1;
const int *cptr=&i;合法,但不能通过cptr改变i的值
和常量引用一样,指向常量的指针没有规定所指对象必须是常量。指向常量指针的要求是不能通过指针改变对象的值,但没有规定不能通过其他途径改变。

指针和constexpr

constexpr仅对指针有效,与指针所指对象无关。
const int *p=nullptr;指向整型常量的指针
constexpr int *q=nullptr;指向整数的常量指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值