C语言关键字const

概述

C语言中的const关键字用于修饰变量函数参数函数返回值,以指明它们的值在程序的整个执行期间

都不会被改变。const限定的变量值是只读的,不能通过程序改变它的值。const是一个C语言(ANSI

C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用

1 const修饰变量

变量名前加上const关键字,表明该变量是一个常量,它的值在程序运行期间不能被改变。const 修饰的

变量是一个常量,它的值在程序执行期间不会改变,只能被赋值一次。

const修饰后的变量i是只读的,不允许被修改,在编译的时候会报error。

2 const修饰函数参数

const 函数是一种特殊的函数,它可以保护函数的内容不被修改和更改。一旦函数被声明为const,它的

任何内容都不能被修改,任何试图修改它的尝试都会导致编译时错误。通常,const函数用于保护数据结

构,以防止意外的更改。

const修饰函数表示函数不可以修改,意味着函数内部的变量和参数也不可以被修改,而且函数内部不能

执行像write或者malloc之类的修改变量的操作。

2.1 const修饰函数参数

const修饰函数参数表示该参数是常量,在函数体内不允许改变参数的值。当函数被调用时,它只能被赋

予一个固定的值,这可以帮助编译器做出更好的优化,并保证不会发生意料之外的错误。

如果函数参数被const修饰,该参数是不能在函数里面被修改,否则是错误的。

2.2 const修饰函数返回值

const修饰的函数返回值表示返回的值是常量,不能对返回的值进行修改,也就是说在函数内部不能修改

返回值。

如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加 const 修饰

没有任何价值。

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

该返回值只能被赋给加 const 修饰的同类型指针;

上面的写法是错误的,将出现编译错误如下:

正确的写法如下,要在变量前加个const才行。

3 const扩展

3.1 const变量与denfine常量

1、const 是在 编译、运行的时候起作用,而define 是在编译的预处理阶段起作用 。

2、const 有对应的数据类型,是要进行判断的,可以避免一些低级的错误。define 只是简单的字符串替

换,没有类型检查。而 const 有对应的数据类型

3、const 常量可以进行调试的,define 是不能进行调试的,因为在预编译阶段就已经替换掉了。

4、 const 定义的只读变量在程序运行过程中只有一份备份。define 只是进行展开,有多少地方使用,就

替换多少次,它定义的宏常量在内存中有若干个备份;

const int i = 3; int j[i]; 经过编译器是会报错,编译不过的。

原因分析:

常量是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而“只读变量”

则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。const就是用来限

定一个变量不允许被改变的修饰符。上述代码中变量i被修饰为只读变量,可惜再怎么修饰也不是常量。

而ANSI C规定数组定义时长度必须是“常量”,“只读变量”也是不可以的,“常量”不等于“不可变的

变量”。但是在C++中,局部数组是可以使用变量作为其长度的

3.2 const修饰指针

const指针是指指向常量的指针,它指向的内存空间中的值不能更改,它只能指向一个常量,而不能指向任何变量或者表达式。

3.2.1 指针常量与常量指针

指针常量是指一个指针变量,它指向的位置是不能改变的,也就是说,它指向的内存位置是固定的。而常量指针则是指一个指针,它指向的内容是不可改变的,也就是说,它指向的内容是固定的。

指针常量:int *const p; const *int p;

常量指针:const int *p; int const *p;

指针常量是指指针本身的值不能被改变,但指针指向的数据却可以被改变。(地址是一定的,但内容可以修改)

常量指针则是指指针指向的数据不能被改变,但指针本身的值可以被改变。(指针可以指向其他地址,但内容不可以改变)

  • 15
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言关键字const用于声明一个常量,即变量的值在声明后不能再被修改。被const修饰的变量只能读取其值,不能修改。 在引用的代码中,第四道代码声明了一个指针p,该指针指向一个常量int型变量a。这意味着p所指向的值不能被修改,同时p本身也不能指向其他的变量。因此,对p进行赋值或者修改*p的值都是非法的操作。 在引用的代码中,const修饰的变量a被声明为常量,即a的值不能被修改。当尝试修改a的值时,编译器会报错。 总结起来,C语言关键字const用于声明常量,常量的值在声明后不能再被修改。常量可以修饰变量或指针,使其成为只读或只指向特定变量的指针。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C语言关键字const详细讲解](https://blog.csdn.net/li1829146612/article/details/119636084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [[C语言]const关键字详解](https://blog.csdn.net/yjlyyj/article/details/125259458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C语言关键字const和指针的结合使用](https://download.csdn.net/download/weixin_38499706/12743173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值