C++ Prime 笔记

1.基础知识

2.变量和基本类型

指针和引用

 、

空指针 

const

const的引用

 引用和指向const引用

 

只有这两种引用吗?

左值和右值

左值:左值是指可以出现在赋值运算符左边的对象,代表着一个可以定位和修改的内存位置。你可以通过左值来访问和修改内存中的某个值。左值具有持久性,通常是变量或者可以取得地址的对象。

int a = 10;
a = 20;  // a是一个左值

右值:右值是指不能出现在赋值运算符左边的表达式。右值代表的是临时值,通常是计算结果或者字面值,它不一定指向一个固定的内存位置。右值通常没有持久性,不能获取地址,生命周期通常非常短。

int x = 10;       // 10 是纯右值
int y = x + 5;    // x + 5 是纯右值

指针、指向常量的指针、常量指针、指向常量的常量指针 

int a = 10;
int b = 20;

// 普通指针
int* ptr1 = &a;
*ptr1 = 30;  // 修改 a 的值

// 指向常量的指针
const int* ptr2 = &a;
// *ptr2 = 40;  // 错误:不能通过 ptr2 修改 a
ptr2 = &b;     // 可以修改 ptr2 的地址

// 常量指针
int* const ptr3 = &a;
*ptr3 = 50;    // 可以通过 ptr3 修改 a
// ptr3 = &b;  // 错误:不能修改 ptr3 的地址

// 指向常量的常量指针
const int* const ptr4 = &a;
// *ptr4 = 60;  // 错误:不能通过 ptr4 修改 a
// ptr4 = &b;   // 错误:不能修改 ptr4 的地址

  顶层const和底层const

int a = 10;
const int b = 20;

// 顶层const:指针本身是常量
int* const p1 = &a;  // p1的地址不能变,但*p1可以变
*p1 = 30;            // 合法
// p1 = &b;          // 非法,p1是顶层const

// 底层const:指针指向的对象是常量
const int* p2 = &b;  // *p2不能变,但p2的地址可以变
p2 = &a;             // 合法
// *p2 = 40;         // 非法,p2是底层const

// 顶层const + 底层const
const int* const p3 = &b;  // p3的地址和*p3都不能变
// p3 = &a;                // 非法
// *p3 = 50;               // 非法

3.字符串、向量和数组

vector

1.不能用for循环向vector对象添加元素

2. 不能用下标添加元素,通过push_back语句

3.vector和string对比

(1)本质都为动态数组,但是vector可以存储任意类型元素,string只能存储字符类型。        

(2)二者都支持动态内存分配,可自动调整内存大小,元素超过容量时都会分配更大的内存块,并将原有数据复制过去。

(3)具有相似的成员函数,支持拷贝、赋值、运算。string提供了字符串独有的操作。

(4)都支持迭代器。(迭代器规则:begin():指向容器的第一个元素;end():指向容器中最后一个元素的下一个位置(即“末尾后”的位置,不指向有效元素)。

if(s.begin!=s.end)//确保s非空
4.迭代器

凡使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值