栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021-10-02

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-02

文章目录
  • 第三天
      • 1.引用
      • 2.指针
      • 3.const限定符

第三天

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

1.引用

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

#include 
int main(int argc, char** argv) {
	int org1 = 10;
	std::cout << "now org1 is " << org1 < 

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 < 

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 < 

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 < 

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

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

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 < 

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 = π

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

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的界面看着确实舒服,美工做的特别好,等有空了再弄吧

今日份结束

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291554.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号