C++ primer 基础学习笔记(二)

基本类型

算术类型

​ 整型可以分为带符号“signed”和无符号“unsigned”。带符号可以表示正数、负数和0,无符号仅能表示大于0的值。

​ 类型int、short、long和long long都是大夫好的,在这些前面添加unsigned就可以得到无符号类型。

类型转换

举个🌰

boll b = 42; //b为真
		非布尔类型的算术值赋给布尔类型时,初始值为0则结果false,否则为1.
int i = b; //i的值为1
		把布尔值赋给非布尔类型时,初始值为false结果为0,初始值为ture结果为1.
i = 3.14; i的值为3
		浮点数赋值给整数类型,结果值仅保留小数点前的部分。
double pi = i; //pi的值为3.0
		整数值赋给浮点类型,小数部分记为0
unsigned char c = -1; //假设char占8比特,c为255
		赋给无符号类型一个超过它表示范围的值,结果是初始值对无符号类型表示数值总数取模后的余数。例如8比特大小的unsigned char表示0~255区间内的值,如果我们赋给一个区间外的值。实际结果是该值对256取模后的余数,即255.
signed char c2 = 256; //假设char占8比特,c2的值未定义
	赋给带符号类型一个超过它表示范围的值,结果是未定义的。

字面值常量

以0开头的是八进制

以0x或0X开头的是十六进制

-42 这个符号不在字面值内,仅表示对这个字面值取负值。

浮点型字面值表示为一个小数或者以科学计数法表示的指数

​ 例如 3.14 3.14159E0 0. 0e0 .001

‘a’ char型字面值

”hello world“ 字符串字面值 实际上是由常量字符构成的数组

'A’表示单独字符 "A"代表一个字符的数组

变量

int sum =0 , value ,units_sold=0 ; //sum、value和units_sold 都是int
sales_item item; //item的类型是sales_item
std::string book("0-230-24-x"); //book通过一个string字面值初始化

初始化 初始化不是赋值,把对象的当前值擦除,以一个新的值替代。

声明:使名字为程序所知,如果一个文件想使用别处定义的名字,则必须包含对那个名字的声明。变量声明规定了变量的类型和名字。

定义:负责创建于名字关联的实体,规定了变量的类型和名字,申请储存空间,为变量赋初值。

变量只能定义一次,可以多次声明。

想声明而非定义,则加关键字:extern,而且不要显示初始化变量;但如果extern语句中包含初始值,就不再是声明,而是定义了。

extern int i; //声明i而非定义i
int j; //声明并定义 j
extern double pi = 3.1415926; // 定义

作用域
(待补充)
全局作用域
(待补充)
嵌套作用域
(待补充)

复合类型

引用:为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符携程&d的行驶来定义引用类型,其中d使声明的变量名。(只是给一个已经存在的对象取了另外一个名字)。

引用的定义:举个🌰

int i =1024, i2 = 2048; //i和i都是int
int &r =i ,r2 = i2; // r是一个引用,和i绑在一起,r2是int 
int i3 =1024, &ri = i3; //i3是int, ri是一个引用,和i3绑定在一起。
int &r3 = i3, &r4 = i2; //r3和r4都是引用。

int &refVal4 = 10; // 错误,引用类型初始值必须是一个对象。

double dval = 3.14;
int &refVal5 = dval; //错误,此处引用的初始值必须是int类型

指针:指向(point to)另外一种类型的复合类型; 指针实现了对其他对象的间接访问;

( 指针本身就是一个对象,允许指针赋值和拷贝,在生命周期内可以指向不同的对象; 无须在定义时赋初值;)

定义指针类型方法:将声明符写成*d的形式,其中d是变量名

举个🌰:

int *ip1, *ip2 ; // ip1和ip2都是指向int型对象的指针。
double dp, *dp2 ; //dp2是指向double型对象的指针,dp是double型对象。

//获取对象地址,取地址符 (&)
int ival = 42 ; 
int *p = &ival ; //p存放变量ival的地址 or p是指向变量ival的指针

指针的类型和指针指向的对象要严格匹配

利用指针访问对象,举个🌰

//如果指针指向了一个对象,则允许使用解引用符(*),来访问对象:
int ival = 42;
int *p = &ival ; // p存放变量ival的地址
cout << *p ; // 由符号*得到指针p所指对象,输出42 

空指针:不指向任何对象,在试图使用一个指针之前首先检查是否为空。

int *p1=nullptr; //等价于 int *p1 = 0;
int *p2=0 ; //直接初始化p2 为字面常量0
int *p3=NULL;// 等价于 int *p3 = 0;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j4gmC8Hs-1676346645794)(D:\Desktop\Ele\C-plusplus-notes-chinese--master\学习笔记2.assets\image-20230214112609229.png)]

赋值和指针
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QHvqtFMJ-1676346645795)(D:\Desktop\Ele\C-plusplus-notes-chinese--master\学习笔记2.assets\image-20230214112720206.png)]

其他指针

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AyFWjN73-1676346645796)(D:\Desktop\Ele\C-plusplus-notes-chinese--master\学习笔记2.assets\image-20230214112813798.png)]

void*指针:用于存放任意对象地址。举个🌰:

double obj = 3.14,*pd = &obj; // void* 可以存放任意类型对象的地址
void *pv = &obj; // obj 可以存放任意类型对象
pv = pd; // pv 可以存放任意类型指针

复合类型声明。举个🌰:

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

//** 是指向指针的指针
int ival = 1024 ;
int *pi = &ival ; //pi是指向一个int的数
int **ppi = &pi ; // ppi是指向一个int的指针

const限定符:与const绑定,称为对常量的引用 。举个🌰:

int i = 42 ;
const int &r1 = i ; //
const int &r2 = 42 ; // 
const int &r3 = r1 * 2 ; //正确,r3是一个常量引用
int &r4 = r1 *2 ;//

(未完)

处理类型

(未完)

自定义数据结构

(未完)

(一天最多看这么多,看多了会死)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值