c++primer第二章难点

指针

通常难以理解;
最重要的两个符号:取地址符(&)以及解引用符(*);
这两种符号在不同的语义下具有不同的解释:
例如:

int i=43;
int &r= i;	//需要注意这个取地址符属于声明的一部分,这句代码表示r是i的另一个名称,不是简单的赋值,r的改变也会影响到i的值;
int *p;		//这个解引用符同样属于声明的一部分,p表示一个指针;
p=&i;		//表示p指向i,p是i的地址;
*p=i;		//给p指向的变量进行赋值;
int &r2=*p; //r2是p指向变量的另一个名称,这里p指向了i所以r2就是i;

弄明白这两点之后就没有什么难懂的;

还有空指针,可以有几种形式:

int *p=0;
int *p=nullptr;
int *p=NULL;

还有一种是指向指针的指针:

int i=0;
int *p=&i;
int **q=p;//q指向的变量是p,也就是说*q=p,**q=i;

const限定符,常量

const int i=5;  //正确
const int j;	//错误,未初始化
i=6; 			//错误,想要改变常量值
//i这个常量有两个点需要注意:1是常量i在声明的时候就必须初始化,2是改变常量变量的值;
const int &r=i; //正确
int &t=i;		//错误
//对于常量的引用,只有常量可以引用常量,普通变量不能够引用常量
int i=1;
int j=2;
const int* p=&i;
*p =2; //错误,p指向一个常量变量,不能改变;
p =&j; //正确,虽然不能通过p来改变p所指向的值,但是可以改变p指向的变量;



int* const p=&i;
*p= 2;//合法,p所指向的并不是一个常量,所以可以通过p修改p所指向的变量
p=&j;//错误,p是一个常量不可以更改;



const int* const p=&i;
*p = 2;//错误;
p=&j;  //错误

auto类型说明符

c++11中引入了auto说明符,让编译器代替我们分析表达式的类型;

auto it =nums[0];//编译器根据nums[0]的类型,推断出it的类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值