首页 > 其他分享 >const的用法

const的用法

时间:2024-03-12 23:00:12浏览次数:20  
标签:const 常量 指向 int 用法 修饰 指针

1、修饰局部变量

const int n=5;
int const n=5;
这两种写法都是一样的,都是表示变量n的值不能被改变了!
但在用const修饰前,一定要给变量初始化!否则就不能再进行赋值了。

2、修饰指针与指针常量

2.1 常量指针

常量指针是指针指向的内容是常量。
const int * n;
int const * n;

数据类型 + const + 指针 -> 常量指针

特点:指针的指向可以修改,但是指针指向的值不可以修改

修改常量指针的值的方法:
1.常量指针可以通过其他的引用来改变变量的值
int a = 10;
const int *p = &a; //用常量指针p来指向变量a
*p = 20; //错误,指针指向的值不可以修改
a = 20; //可以通过修改a的值来改变常量指针p的值

2.常量指针还可以通过修改指针的指向来改变变量的值
int b =20;
p = &b; //或者是让p指向另一个变量b,来实现修改p的值

2.2 指针常量

指针常量是指指针本身是个常量,不能指向其他的地址
int *const n;
数据类型 + 指针 + const -> 指针常量

特点:指针的指向不可以改,但是指针指向的值可以改
int a = 10;
int *const p = &a;
*p = 20; //正确,可以通过修改指针指向的值
p = &b; //错误,不可以修改指针的指向

2.3 指向常量的常指针

const int* const p;
是以上两种的结合,指针指向的位置不能改变,并且也不能通过这个指着改变变量的值。
但是依然可以通过其他普通指针改变变量的值。

3、修饰函数的参数

根据常量指针与指针常量,const修饰函数的参数也是分为三种情况:

1.防止修改指针指向的内容(用常量指针)
void func(int *p1, const int *p2);
如果函数体内的语句试图改变p2的内容,编译器将指出错误。

2.防止修改指针指向的地址(指针常量)
void func(int *const p1, int *const p2);
指针p1和p2所指向的地址都不能修改。

3.以上两种的结合

4、修饰函数的返回值(暂时看看不懂)

如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容就不能被修改,该返回值只能被赋给加const修饰的同类型指针。

const char * func(void);
char *str = func(); //将会出现编译错误
const char *str = func(); //正确用法

5、修饰全局变量

全局变量的作用域是这个文件,我们应该尽量避免使用全局变量。
因为一旦有一个函数改变了全局变量的值,它也会影响其他引用这个变量的函数,导致出了bug之后很难发现。
如果一定要用全局变量,我们呢应该尽量的使用const'修饰符进行修饰。
这样防止不必要的人为修改,使用方法与局部变量是相同的。

标签:const,常量,指向,int,用法,修饰,指针
From: https://www.cnblogs.com/H43724334/p/18069422

相关文章

  • 探究WPF中文字模糊的问题:TextOptions的用法
    有网友问WPF中一些文字模糊是什么问题。之前我也没有认真思考过这个问题,只是大概知道和WPF的像素对齐(pixelsnapping)、抗锯齿(anti-aliasing)有关,通过设置附加属性TextOptions.TextFormattingMode或者TextOptions.TextRenderingMode来解决。这次我也查了下资料,了解了这几个附加属性......
  • const的理解
    Const什么是CONST被const修饰后的变量,只能保持一个值,无法再次赋值(一次指定用一辈子);intmain(){constintage=18;//age=20;//这句错误无法执行!!!return0;}如果修饰的是类、结构体、结构体或类的指针、其成员都不可以更改structdate{intyear;intm......
  • UVM宏解释+odt文件转doc+merge命令和difflib+python调用命令+clog2和系统函数+java添
    UVM宏解释UVM_DISABLE_AUTO_ITEM_RECORDINGhttps://blog.csdn.net/MGoop/article/details/127295965itemrecord的方法主要是用于记录事务信息的,原理是调用accept_tr,begin_tr,end_tr。似乎和波形上显示出各个事务相关。默认情况下,在调用get_next_item()和item_done()时自动......
  • Java多线程基础用法
    线程创建线程创建的三种方式:Thread(继承Thread类)自定义线程类继承Thread类重写run()方法。编写线程执行体创建线程对象,调用start()方法启动线程packagecom.lily.demo01;publicclassTestThreadextendsThread{@Overridepublicvoidrun(){for......
  • default在java中的用法 java里default
    介绍default是在java8中引入的关键字,也可称为Virtualextensionmethods——虚拟扩展方法。是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。为什么需要这......
  • java springboot拦截器的实现及用法
     1.前景,有时候我们在不同的地方需要使用用户的信息,我们可以使用threadLocal存储信息,这样我们在在这个线程随时使用用户信息了,不用自己在写一段冗余代码了,这时候使用拦截器就很不错 2.实现1.实现HandlerInterceptor2.重写实现方法  preHandle:在业务处理器处理请......
  • Prism框架的用法
    今天,我向大家介绍一款WPF后台框架,以及,它的用法。官网https://prismlibrary.com/Prism框架是一个用于构建松耦合、可维护且可测试的WPF和Xamarin.Forms应用程序的开源框架。在Prism中,IContainerRegistry接口用于注册和解析应用程序中的依赖项,从而实现依赖注入和反转控......
  • SQLIntegrityConstraintViolationException: Cannot add or update a child row: a fo
    异常原因:两张表存在外键关联并且有级联操作,级联更新或级联删除等1.(此处为)设置的外键与另一个表中的唯一索引列(一般是主键)中的值不匹配2.添加的外键列与另一个表的唯一索引列(一般是主键)的数据类型不同......
  • 【力扣】子集II(回溯法)(排序函数的一种隐藏用法?)
    题目描述可以套回溯模版的题,但是在写的过程中发现,如果数组中有多个相同元素分散存在的话,就会有一些子集无法得到像这里的1,4,4,如果对数组从左到右枚举的话是无论如何都得不到的。对这样的数组使用排序函数后,造成的效果就是相同的元素都堆在了一起,这样就能正确地得到所有子集......
  • P4139 上帝与集合的正确用法 题解
    传送门我觉得这题最有意思的其实是"最终会固定为一个数"这个结论。扩展欧拉定理:\(a^b\bmodp\),当\(b\ge\varphi(p)\)时,\(a^b\equiva^{b\bmod\varphi(p)+\varphi(p)}\pmodp\)。所以\(2^{2^{2^{\cdots}}}\)可以递归求解。边界条件\(p=1\)。复杂度如何保证?其实就是......