iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中的Const关键字怎么用
  • 326
分享到

C语言中的Const关键字怎么用

2023-06-29 02:06:46 326人浏览 独家记忆
摘要

这篇“C语言中的Const关键字怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的Const关键字怎么用”文章吧

这篇“C语言中的Const关键字怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的Const关键字怎么用”文章吧。

    前言

    const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程序上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解别人的程序有所帮助。

    01const简述

    下面简单描述一下const,基本都是教科书的知识。const修饰的变量,其值存放在只读数据段中,其值不能被改变。称为只读变量。关于什么是数据段,什么是代码段,请看我之前的文章《C语言的内存分配》。

    int const a;const int a;

    上面两条语句都可以将a声明为一个整数,它的值不能被修改。这两种方式你可以任意选一种即可。

    常量在定义时可以被初始化。

    int const a =15;

    当指针和常量结合时,就会很有趣,因为有两样东西都可能成为常量,指针和它指向的实体。一般大家在大学考计算机二级和面试时经常会遇到的。

    int *a;

    a就是一个很普通的指向整型的指针。

    int const *a;

    这时则是一个指向整型常量的指针。也就是说,你可以修改指针的值,但是不能修改它指向的值。

    int *const a;

    这时a是一个指向整型的常量指针。这个指针是常量,它的值无法修改,但是你可以修改它所指向的整型的值。

    int const *const a;

    这个时候无论是指针本身还是它所指向的值都是常量,都不允许修改。

    那么问题来了,就像C语言的运算符的优先级,这个东西很不好记忆,在实际开发中,我们直接多用()符号解决优先级的问题。上面指针和const结合那么麻烦,学习为了什么呢?

    合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

    正是基于上面的原因,一些优秀的开源代码都会利用const这个属性,深入理解后,方便我们阅读理解一些优秀的开源代码。

    02常量的应用

    上文就简述了一下教科书中的const定义,现在说一下const在我日常开发中的应用。

    在单片机开发中

    const定义一个常量,在单片机开发中,一个定义在函数体外的常量constint a = 5; 它是存储在单片机内部Flash里的,不懂的同学请看之前的文章《C语言在STM32中的内存分配》。那么上文提到和指针结合时,也是存储在内部Flash中吗?我们来验证一下

    int data = 0x1234;int const *a = &data;int *const b= &data;int const *const c= &data;int main(void){    int data1 = 0x1234;    a =&data1;    data1 = *b;    data1 = *c;    while(1);}

    它们的内存分配如下

    C语言中的Const关键字怎么用

    b和c是分配到内部flash的,a是分配到ram中的。其实这也很好理解,根据上面的const的定义,单片机在分配时,将不能修改的变量,也就是只读变量放到flash中,可以读写的变量放到ram中,这个大家仔细想一下就明白了。

    常量作为函数的参数

    非指针参数(也就是传值参数)不会被修改原始值,const对它是没有意义的,所以这里只讨论参数是指针加const的情况。

    在上面看到,指针加const共3种情况,这里先讨论int const *a; 也就是你可以修改指针的值,但是不能修改它指向的值。

    int fun(int *p) {      if(*p == 0xA5)      {            return*p;      }else{             p++;            return *p;      }}

    上面是个简单的例子,也就是传入一个指针,函数读取指针指向的内容,执行不同的命令。类似串口接收,一个函数内部处理这些数据,但是不能修改,可能串口接收的数据在其他地方还有用。

    在上述例子中,没有问题的,因为代码全在“掌控”中。函数内部是否进行写操作,自己是知道的。但还有一个更规范的写法。

    int fun(int const *p) {      if(*p == 0xA5)      {            return *p;     }else{             p++;             return *p;      }}

    这里写法,就是明显表现出自己的设计意图,函数内部不可以对指针指向的内容进行修改,只能读取。

    C语言中的Const关键字怎么用

    如果尝试修改,编译器会直接报错的。但是函数内部也是可以绕过去,修改的数据的,如下

    int fun(const int *p) {     int *p2 = p;      *p2 += 1;      return*p;}

    那么对于int *const a;有没有对应的使用场景呢?如下

    C语言中的Const关键字怎么用

    这样的接口设计,如果函数内部尝试修改指针的值,也就是指针指向的位置,编译器就会直接报错。

    不过这里例子很现实,因为即使去掉p2的const修饰,编译器会直接报waring,因为p2是入参。这里只是简单举例子,大家理解意思就好。

    C语言中的Const关键字怎么用

    在日常开发中,入参是intconst *a; 使用场景比较多。

    c++中应用加const

    C++中可以使用应用的语法,这里不再展开什么是应用,如下例子,C++函数参数中引用时也常加const修饰,如下

    void find(constint  &x){     .......}

    最后,举两个常用的标准C库函数声明,它们都是使用const的典范。

    字符串拷贝函数:char*strcpy(char*strDest,constchar *strSrc);

    返回字符串长度函数:intstrlen(constchar *str);

    03#define和const

    #define预编译和const在某些情况下有些“混淆”,如下

    #define MAX_NUM 5int const max_num = 5;void fun(){      if(len >MAX_NUM)      if(len> max_num)}

    上述代码5行和6行都能起效果。那么我们就详细分析一下它们的区别

    #define的数据是宏定义,它占用的是代码段空间(单片机对应:内部flash),const定义一个数据类型,它占用的是data段(单片机对应:内部ram)。

    如上,#define是宏定义,在预编译阶段直接替换,而const是数据类型。

    #define MAX_NUM 5int const max_num = 5;int data[MAX_NUM];intdata2[max_num];

    上述代码第4行是编译不过的,因为max_num是一个int的数据类型变量,数组定义的长度不能用变量。实际上,在更章节第一个例子,只用于判断长度,#define更加合适,因为只要允许使用字面值常量的地方都可以使用宏定义。

    define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。define只是简单的字符串替换会导致边界效应,

    比如定义

    #define A 1#define B A+3#define C A/B3

    那么c是多少呢?c=A/B3=A/A+33=1/1+33=10;所以这种用的时候可以直接都用个括号括起来,就不怕边界效应了。

    const不能重定义,不可以定义两个一样的,而define就比较牛气了,它通过undef取消某个符号的定义,再重新定义。并还可以用于判断宏定义是否存在,常用于头文件防止头文件被重复引用。

    #ifndef GRAPHICS_H //防止graphics.h被重复引用 #defineGRAPHICS_H    ……代码…… #endif

    const常量可以进行调试的,define是不能进行调试的,主要是预编译阶段就已经替换掉了,调试的时候就没它了。

    以上就是关于“C语言中的Const关键字怎么用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网其他教程频道。

    --结束END--

    本文标题: C语言中的Const关键字怎么用

    本文链接: https://www.lsjlt.com/news/322023.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C语言中的Const关键字怎么用
      这篇“C语言中的Const关键字怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的Const关键字怎么用”文章吧...
      99+
      2023-06-29
    • c语言中const关键字的作用
      const关键字在c语言中用于修饰变量或函数,使其值或行为在程序执行期间保持不变。它可以修饰变量(使其成为常量),防止意外修改数据,提高程序安全性。此外,const还可以修饰函数,确保其...
      99+
      2024-05-10
      c语言 敏感数据 代码可读性
    • C语言关键字const与volatile怎么用
      今天小编给大家分享一下C语言关键字const与volatile怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、con...
      99+
      2023-06-30
    • 深入聊聊C语言中的Const关键字
      目录前言01const简述02常量的应用常量作为函数的参数C++中应用加const03#define和const总结前言 const是一个C语言的关键字,它限定一个变量不允许被改变。...
      99+
      2024-04-02
    • C语言中的关键字怎么用
      本篇内容介绍了“C语言中的关键字怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.关键字变更历史1999年12月16日,ISO推出了C...
      99+
      2023-06-17
    • 剖析C语言关键字之void,const,return
      目录returnvoid一.可做为函数的通用接口二.void不能修饰变量三.void修饰函数返回值const总结return 首先我们弄清楚c语言内存分配的方式 然后我们看一段代码...
      99+
      2024-04-02
    • C++中引用和const关键字怎么用
      今天小编给大家分享一下C++中引用和const关键字怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。引用下面的写法定义了...
      99+
      2023-06-29
    • C++11关键字const怎么使用
      本篇内容主要讲解“C++11关键字const怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11关键字const怎么使用”吧!一、历史按理来说,要想了解一件事物提出的原因,最好的办法...
      99+
      2023-06-25
    • 如何分析C语言关键字中的void、const和return
      这篇文章将为大家详细讲解有关如何分析C语言关键字中的void、const和return,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。return首先我们弄清楚c语言内存分配的方式然后我们看一...
      99+
      2023-06-22
    • C语言中的Static关键字怎么用
      这篇文章主要介绍C语言中的Static关键字怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、static关键字的基本含义首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存...
      99+
      2023-06-26
    • C语言中volatile关键字怎么用
      这篇文章主要介绍了C语言中volatile关键字怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.前言编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整...
      99+
      2023-06-20
    • c语言中关键字Static怎么用
      这篇文章将为大家详细讲解有关c语言中关键字Static怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、可执行程序内存分配1. 可执行程序程序分段一个程序的3个基本...
      99+
      2024-04-02
    • c语言register关键字怎么用
      在C语言中,register关键字用于将变量存储在寄存器中,以提高访问速度。但是需要注意的是,register关键字只是给编译器一个...
      99+
      2024-02-29
      c语言
    • 怎么使用c语言中typedef关键字
      本篇内容主要讲解“怎么使用c语言中typedef关键字”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用c语言中typedef关键字”吧!typedef关键字可以为类型取一个新名字。按照惯例...
      99+
      2023-06-25
    • c++关键字const的用法详解
      目录C语言const的用法1、指向常量的指针变量const int *p指针指向int a;2、常指针(常地址)int * const p指针指向int a;3、指向常量的常指针co...
      99+
      2024-04-02
    • C++中引用和const关键字介绍
      目录引用常引用const关键字用法1)定义常量2)定义常量指针3)定义常引用总结引用 下面的写法定义了一个引用,并将其初始化为引用某个变量。类型名 & 引用名 = 某变量名;...
      99+
      2024-04-02
    • C语言详细分析讲解关键字const与volatile的用法
      目录一、const 只读变量二、const 全局变量的分歧三、const 的本质四、const 修饰函数参数和返回值五、volatile 解析六、小结一、const 只读变量 con...
      99+
      2024-04-02
    • c语言中typedef关键字的作用
      c语言中typedef关键字的作用是定义类型别名。它创建已存在数据类型的新名称,增强代码可读性和可维护性,包括:创建类型别名数据类型重用增强代码可读性提高代码可维护性 C语言中type...
      99+
      2024-05-10
      c语言 代码可读性 typedef
    • C#中的const和readonly关键字详解
      const和readonly经常被用来修饰类的字段,两者有何异同呢? const 1、声明const类型变量一定要赋初值吗? 一定要赋初值 public class Student ...
      99+
      2022-11-13
      C# const关键字 readonly关键字
    • c语言include关键字怎么使用
      在C语言中,`include`关键字用于包含头文件。头文件是一种在源代码中声明函数、变量和宏等的文件,可以在多个源代码文件中重复使用...
      99+
      2023-09-26
      c语言
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作