IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 2021-10-02 -> 正文阅读

[C++知识库]2021-10-02

第三天

今天学的东西有点乱,但是和C基本上依旧一模一样,但是这一遍看完以后对指针和引用的理解较之以前不大一样了,应该说是理解地更准确。

1.引用

简单来说,引用就是绑定,&这个符号是有两种意义,在声明里面就是引用,起到变量之间绑定作用,在其他语句中,意思就是取地址,和基本运算符差别不大,更改其中一个值。另一个值也会发生改变,这里注意,如果使用引用,在声明的时候一定要绑定一个变量,不可以是常量,也不能只定义

#include <iostream>
int main(int argc, char** argv) {
	int org1 = 10;
	std::cout << "now org1 is " << org1 <<std::endl;
	int &org = org1;                                     //org与org1绑定 
	std::cout << "now the org1 is " << org1 << " and org is " << org <<std::endl;
	org = 20;
	std::cout << "now the org1 is " << org1 << " and org is " << org <<std::endl;
	return 0;
}
}

now org1 is 10
now the org1 is 10 and org is 10
now the org1 is 20 and org is 20
另一种用法是取地址,后面指针再写

2.指针

指针,就是指向某一块地方,指针存放某个对象的地址

	int org1 = 10, *org = &org1;
	std::cout << "now *org is " << *org <<std::endl;

now org is 10
因为org此时是存放的变量org1的地址,*符号在声明的时候是定义一个指针,在作为运算符使用时的意思是解,即查看该地址存放的变量的值。&符号是取得变量org1的地址。

注意:*org不是存放的地址,org才是存放的地址
*只是告知这条是声明,在这里不做解的意思

下面是复合类型,复杂一点的

int org1 = 10, *org = &org1;
int *&org2 = org;       //属于是将org2作为一个引用,org和org2绑定在一起了,地址一起改变 ,如果有一个指向的值发生变化,二者都将变化
std::cout << "now *org2 is " << *org2 <<std::endl;

now *org2 is 10

int i =42;
int *p;
int *&r = p;
r = &i;                //这里改变了r的地址
std::cout <<"now *r is " << *r << " and *p is" << *p <<std::endl;
*r = 0;					//r的地址和i的一样,r和p为绑定的
std::cout <<"now *r is " << *r << " and *p is " << *p <<std::endl;

now *r is 42 and *p is42
now *r is 0 and *p is 0

这边是直接使用的书上的例子,一开始没弄清楚一些东西,现在大概明白了,上面那块实我自己写的,本来想通过改变地址来改变指向的值,但是一直报错,应该是不能直接进行地址的代换了,不能使用一般的赋值形式
再加一个例子

int org1 = 1024;
int *org2 = &org1;
int **org3 = &org2;

解释一下,org2是存放的org1的数值的地址,可以说是org2指向org1,下面的**org3可以理解为是指针org3的解是存放的org2的地址,所以可以说是org3指向org2,org2指向org1,所以三者的值应该都为1024

org3
org2
org1

注意使用的时候从右往左去理解复合类型的定义

3.const限定符

const限定符就是定义了不能再变了,没什么很特殊的地方,注意一点,const定义变量时候一定要初始化,只单单定义会报错
例如

const int a = 3;

再改变a的值就会报错,无论是赋值还是其他形式
还有一点比较重要的

extern const int a = 3;

默认状态下,只是在本文件里可以使用,上述不只是在本文件里可以使用,在其他文件里变量值还是不变的

	int i =42;
	int &r1 = i;
	const int &r2 = i;
	std::cout <<"now r1 is " << r1 << " and r2 is" << r2 <<std::endl;
	r1 = 0;
	std::cout <<"now r1 is " << r1 << " and r2 is " << r2 <<std::endl;
	i = 20;
	std::cout <<"now i is " << i << " and r2 is " << r2 <<std::endl;

now r1 is 42 and r2 is42
now r1 is 0 and r2 is 0
now i is 20 and r2 is 20
简单来说,虽然const定义r2,将r2与其他变量绑定,不能通过直接改变r2的值,但是可以通过i或者是与i绑定的其他变量去改变r2的值。
const定义的指针只能指向const定义的变量

const double pi = 3.14;
const double *p = &pi;

指向常量的指针不可以用来改变常量的值,但是没有规定那个对象的值不能通过其他途径改变。
下面代码不打了,基本理解就行,也不是很复杂。

double *const curErr = &k
const double *curErr = &k

1.指针在const前,意思为该指针将永远指向地址k
2.指针在const后,意思为该指针为指向常量的指针

总结一下
如果说是指向常量的指针,那么他的地址和所指向的值不能发生改变,假如说指针所存地址不变,但是他的指向是一个可变常数,那么就可以改变该数的值,同(1)。

针对于const对指针的定义不同,就引出了两种。

顶层const,表示指针本身是一个常量,地址不变。

底层const,表示指针所指对象是一个常量。

更一般的,对于任何的数据类型,表示任意的对象是常量的,都是顶层const。
举例:

const int *const p3 = p2; //靠又的明显是地址不变,是顶层const,左边用作声明,是底层const
const int ci =42;  //对于表示的对象是常量,是顶层const,没有指针,用一般判断
const int *p2 = &ci; //p2的值允许被改变,用作声明,是底层const

总结一下,今天的东西看的有点杂,不是很喜欢这些东西,后面希望应用多一点了吧

md下午安装VScode配置c++环境,搞了半下午,没弄好,还是回来用c++,VScode的界面看着确实舒服,美工做的特别好,等有空了再弄吧

今日份结束

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 16:54:12  更:2021-10-03 16:55:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:59:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码