C++ Primer_学习笔记_Day1

个人学习笔记,记录一些之前未掌握的知识点,不全面也不按特定顺序。


1,省略std:: 

在 #include<iostream> 后面,添加using namespace std; ,则在之后可以省略std::。


2,小数输出精度控制

C++中,小数的默认输出精度是6位有效数字,可以包含头文件#include<iomanip>后改变。

cout << setprecision(n) << f << endl;

通过上句的n来控制输出有效数字。


3,类型的选择

通常使用int,short一般情况下太小,long和int相差无几,当int不够用时,直接用long long(C++11新特性)。

浮点数运算通常选double,float通常精度不够,long double的 精度通常没有必要。


4,慎用无符号数unsigned

当赋给无符号数类型一个超过它的表示范围时,结果是初始值对无符号表示数值综述驱魔后的余数。

unsigned char c = -1;//假设char占8比特,c的值为255

当无符号数与有符号数做运算时,有符号数会强制转换成无符号数。

unsigned u =10;
int i = -42;
std::cout<<u+i<<std::endl;//如果int占32位,输出4294967264

5,字面值

20 /*十进制*/        024 /*八进制*/         0x14 /*十六进制*/

3.14 /*double*/     3.14f  /*浮点数*/    3.14L/*long double*/    


6,初始化,

列表初始化(C++11新特性)

int a ={0};    int a{0};

但存在丢失信息的风险,将报错:

long double ld =3.1415926536;

int a {ld}, b = {ld};        //错误:转换未执行,因为存在丢失信息的危险

int c (ld), d = ld;        //正确:转换执行,且确实丢失了部分值

任何函数内部变量必须初始化,任何函数外部的变量会自动初始化


7,声明变量 extern

在变量名前添加关键字extern,而且不要显式地初始化变量,否则抵消了extern的作用

extern int i;    //声明i而非定义i
extern double pi = 3.1416;    //定义


8,变量命名规范

标识符要能体现实际意义

变量名一般用小写字母,如index。

用户自动以的类名一般用大写字母开头,如Sales_item。

如果标识符由多个单词注册,则单词间应有明显区分,如student_loan或者studentLoan


9,引用

引用即别名,引用并非对象,它只是一个已经存在的对象所起的另一个名字。

引用本身不是对象,所以引用的引用则非法:

int a =2;int &b = a; int &c = b;//正确
int &(&c )=a;//错误

除了两种例外,引用的的类型必须与其所引用对象保持一致:

int &refVal1= 10;      //错误:引用类型的初始值必须是一个对象
double dval = 3.14;
int &reVal2 = dval;    //错误:此处的引用类型的初始值必须是int类型对象
const int &r = 42;    //正确:第一种列外,初始化常量引用时允许用任意表达式作为初始值
//第二种例外,学到了再补

10,指针

指针存在某个对象的地址,需要用取地址符来获取 (&)。

因为引用不是对象,没有地址,所以不能定义指向引用的指针。

double dval;           //正确:初始值是double型对象的地址
double *pd =&dval;     //正确:初始值是指向double对象的指针
int *pi =pd;           //错误:指针pi的类型和pd的类型不匹配
pi = &dval;            //错误:试图把double型对象的地址赋给int型指针

利用指针访问对象,使用解引用符(*):

int ival = 42;

int *p = &ival;    //p存存放着变量ival的地址,或者说p是指向变量 ival的指针
cout<<*p;          //由符号*得到指针p所指向的对象,输出42
*p = 0;           //由符号*得到指针p所指向的对象,即可以经由p为变量ival复制
cout<<*p;          //输出0

空指针不指向任何对象

int *p = 0;int *p =NULL;int *p =nullptr;(最佳方式,c++11新特性)

void*指针,可以存在任意对象的地址。void*能做的事有限:

和别的指针比较、作为函数的输入和输出,或者赋给另外一个void*指针。

但不能直接操作void*指针所指的对象 ,因为不能却确定这个对象到底是什么变量。

指向指针的引用:

int *p;         //p是一个int型指针
int *&r  = p;   //r是一个对指针p的引用




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值