从零开始学C语言系列之第八章《const入门》

往期回顾

1.【第一章】《认识C语言》
2.【第二章】C语言概述及基本知识1
3.【第二章】C语言概述及基本知识2
4.【第三章】字符串和格式化输入/ 输出
5.【第三章】 printf
6.【第三章】 scanf
7.【第三章】 putchar
8.【第三章】 getchar
9.【第三章】 sizeof
10.【第三章】 strlen
11.【第三章】 define
12.【第四章】运算符第一节
13.【第四章】运算符第二节
14.【第四章】运算符第三节
15.【第四章】运算符第四节
16.【第四章】类型转换
17.【第四章】函数与转化
18.【第五章】while
19.【第五章】for开篇
20.【第五章】for的灵活性
21.【第五章】逗号运算符
22.【第五章】do while
23.【第五章】循环选择
24.【第六章】if
25.【第六章】else if
26.【第六章】break
27.【第六章】continue
28.【第六章】break和continue的区别与作用
28.【第六章】switch
29.【第七章】函数复习
30.【第七章】函数参数
31.【第七章】函数中返回值
32.【第七章】递归
33.【第七章】指针引入
34.【第七章】指针简介
35.【第七章】指针简介2
36.【第八章】数组
37.【第八章】数组2
38.【第八章】多维数组
39.【第八章】指针与数组
40.【第八章】函数 数组 与指针
41.【第八章】使用指针形参
42.【第八章】指针操作



const 引入

​   编写一个处理基本类型(如,int)的函数时,要选择是传递int 类型的值还是传递指向int的指针。通常都是直接传递数值,只有程序需要在函数中改变该数值时,才会传递指针。对于数组别无选择,必须传递指针,因为这样做效率高。如果一个函数按值传递数组,则必须分配足够的空间来储存原数组的副本,然后把原数组所有的数据拷贝至新的数组中。如果把数组的地址传递给函数,让函数直接处理原数组则效率要高。

​   传递地址会导致一些问题。C通常都按值传递数据,因为这样做可以保证数据的完整性。如果函数使用的是原始数据的副本,就不会意外修改原始数据。但是,处理数组的函数通常都需要使用原始数据,因此这样的函数可以修改原数组。有时,这正是我们需要的。例如,下面的函数给数组的每个元素都加上个相同的值:
在这里插入图片描述

const 定义以及优缺点

​   关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const呢,我想事物的存在一定有它自己的道理,所以说const的存在一定有它的合理性,与预编译指令相比,const修饰符有以下的优点:

1、预编译指令只是对值进行简单的替换,不能进行类型检查

2、可以保护被修饰的东西,防止意外修改,增强程序的健壮性

3、编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

看到如下的代码:
在这里插入图片描述
  以上代码中的 const 告诉编译器,该函数不能修改 ar 指向的数组中的内容。如果在函数中不小心使用类似 ar[i]++的表达式,编译器会捕获这个错误,并生成一条错误信息。
​    这里一定要理解,这样使用const并不是要求原数组是常量,而是该函数在处理数组时将其视为常量,不可更改。 这样使用const可以保护数组的数据不被修改,就像按值传递可以保护基本数据类型的原始值不被改变一样。

​   一般而言,如果编写的函数需要修改数组,在声明数组形参时则不使用const;如果编写的函数不用修改数组,那么在声明数组形参时最好使用const。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 16:24:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 16:24:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 16:24:04       82 阅读
  4. Python语言-面向对象

    2024-06-06 16:24:04       91 阅读

热门阅读

  1. 【归档】git使用

    2024-06-06 16:24:04       28 阅读
  2. 【源码】SpringBoot事务注册原理

    2024-06-06 16:24:04       25 阅读
  3. 【ubuntu】增加samba服务和文件夹

    2024-06-06 16:24:04       31 阅读
  4. Vue 2集成Ant Design步骤

    2024-06-06 16:24:04       26 阅读
  5. 134. 加油站

    2024-06-06 16:24:04       27 阅读