当前位置: 首页 > article >正文

关键字:const

const关键字

const关键字也许应该被替换成readonly(只读);

1.1const修饰变量

const修饰的变量,不可直接被修改——但是可以间接修改,使用指针

那么const修饰变量的意义在哪里?(const修饰变量的本意是不让他修改,可是却可以绕开变量,使用指针修改,那么意义何在?)

答:

1.const修饰变量,这个关键字是给编译器看的,让我们的编译器在编译代码时对用const修饰的变量进行语法检查,凡是在后续代码当中,直接对有const修饰的变量进行修改行为时,编译器会直接报错;是程序员告诉编译器,这个变量不想在后续的代码被自己或被别人改掉;当有人直接更改时,编译器会报错;若不加const,当有人修改变量时,可能会造成代码的逻辑错误;

2.告诉其他程序员(正在改你的代码,或者阅读你的代码),这个变量后边不要更改,也属于一种自描述

const int a=10;           //可以放在类型之前,也可以类型之后,二者等价的;
int const a=10;           //建议放在类型之前                                     
a=20;                           //不可直接修改,会报错

int* p=(int*)&a;           //强转一下类型
*p =20;                     //使用地址来改变a的值;

const修饰的变量,不能作为数组定义的一部分,C标准库不可以;但是gcc标准可以

const int n=100;

int arr[n];        //会报错;数组空间开辟的时候,元素个数(中括号里的内容必须是真常量;                          //编译器不会认为n是真常量)

1.2const修饰数组

const 修饰数组,代表数组不可被修改

const int arr[]={0,1,2,3};        //只读数组;

arr[0]=0;                                  //会报错

arr[1]=0;

1.3const修饰指针

用户必须明确,const修饰的数据不能通过哪一方面来改变;

int a=10;

const int *p=&a;                //这两种写法一样;

int const *p=&a;                //const修饰*p,不能通过*p来更改a的数据;

int * const p=&a;              //const 修饰p;p的指向不能改,只能指向a;

const int * const p;        //不能通过*p修改a的值;不能更改p的指向,只能指向a

1.4const修饰函数的参数 

const修饰函数的参数,不希望这个参数在函数体内被改变使用

void func(const int i)        //i不可以直接被改变

 1.5const修饰函数的返回值

const修饰函数返回值,返回值不可被改变

const int* test(){
    static int g_val=100;
    return &g_val
}
int main(){
    const int *p=test();
    *p=200;    //会报错
}

const 修饰函数返回值,如果用户不想函数返回值被别人通过指针来更改函数内部的一个变量,可以对返回值做const修饰,在外部接收的时候,采用同样的编码规则去接收;这样在后续的使用这个变量的时候,就无法做修改了;


http://www.kler.cn/news/332826.html

相关文章:

  • Mac 卸载 IDEA 流程
  • Linux基础命令sudo详解
  • 公寓管理系统|SprinBoot+vue夕阳红公寓管理系统(源码+数据库+文档)
  • 自动驾驶-轨迹拼接
  • yub‘s Algorithmic Adventures_Day5
  • wpf实现新用户页面引导
  • ValueError: You cannot perform fine-tuning on purely quantized models.
  • 2-108 基于matlab的模板匹配法实现车牌识别
  • 云原生化 - 工具镜像(完整版)
  • Matlab进阶绘图第70期—正负面积图
  • c++小游戏
  • pycharm中使用anaconda创建多环境,无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
  • 云原生化 - 基础镜像(简约版)
  • 工具方法 - 面试中回答问题的技巧
  • postgresql的TOAST表
  • nginx的升级
  • C++IO流
  • 论文翻译 | Language Models are Few-Shot Learners 语言模型是少样本学习者(下)
  • C/S模型的简单实现(UDP服务器)、本地套接字(sockaddr_un )的讲解
  • 微信小程序数据操作指南:从绑定到更新