C++

March 11th


ohye!

//读取第一个数,并确保确实有数据可以处理。
if(cin>>currVal){
	int count=1;
	while(cin>>val)//读取剩余的数
	//==别误用为=
}
定义在函数体内部的内置类型变量将不被初始化,而定义于任何函数体之外的变量被初始化为0。
long double ld=3.14159265358979325
int a{ld},b={ld};//错误:转换未执行,因为存在丢失信息的风险。
int c(ld),d=ld;//转换执行,且确实丢失了部分值

变量声明和定义的关系

声明使得名字为程序所知。变量只能被定义一次,但是可以被声明多次。如果要在多个文件中使用同一个变量,就必须将声明和定义分离。
extern int i;声明而非定义
int j;声明并定义
extern int i=9;包含初始值就变为定义辽。
函数体外的标识符不能以下划线开头。

名字的作用域 p44

在全局变量名字全局用,函数体内部改了就不是一个值了。
使用作用域操作符可以改变默认规则(::)
eg:cout<<::reused<<endl;

引用

除了p55(初始化常量引用时允许用任意表达式作为初始值)和p534两种例外情况,其他所有引用的类型都要与之绑定的对象严格匹配。
引用必须被初始化
int a=666;
int &b=a;
int &b//报错
引用即别名,并非一个对象,不能进行引用的引用。
int &juege=10;//错误:引用类型的初始值必须是一个对象。
double pi=3.14;
int &juelakua=pi;//错误:此处引用类型的初始值必须是int型对象。

dadade指针

除了p56(常量指针)和p534(暂时看不懂 也不想看)介绍的两种情况外,其他所有指针的类型都要和它所指向的对象严格匹配。
double dval;
double *pd=&dval;//正确:初始值是指向double型对象的地址。
double *pd2=&pd;//正确:初始值是指向double对象的指针。

int*pi=pd;//错误:指针pi的类型和pd的类型不匹配
pi=&dval;//错误:试图把double型对象的地址赋给int型指针。
空指针
int*p1=nullptr;//best
int*p2=0;
int*p3=NULL;int变量之间赋给指针是错误的操作,即使int变量的值恰好定义0也不行。
int zero=0;
pi=zero;//错误:不能把int变量之间赋给指针。

建议初始化所有指针,若不清楚指向何处,就初始化为nullptr或者0.
任何非0指针的条件值都是true。void*可以用于存放任意类型的地址。(没办法访问内存空间中所存的对象)

int* p1,p2;//p1是指向int的指针,p2是int。

指向指针的引用

引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,所以存在对指针的引用:
int i=12;
int *p;//p是一个int型指针。
int *&r=p;//r是一个对指针p的引用。

r=&i;//r引用了一个指针,因此给r赋值&i建是令p指向i。
*r=0;解引用r得到i,也就是p指向的对象,将i的值改为0。

const

const对象必须初始化,初始值可以是任意复杂的表达式。
默认状态下,const对象仅在文件内有效,若我们想让这类const对象像其他(非常量)对象一样工作(只在一个文件定义它,而在其他文件声明并使用它。),需添加关键字extern。
//定义并初始化了一个常量,该常量能被其他文件访问。
extern const int bufSize=fcn();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值