OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 55056|回复: 416

【每日一题:6月6签到】C语言const关键字的用法,这个STM32代码中经常看到,不懂的一定要认真学习。

  [复制链接]

294

主题

1414

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
7791
金钱
7791
注册时间
2015-10-15
在线时间
2858 小时
发表于 2020-6-6 11:58:01 | 显示全部楼层 |阅读模式

正点原子每日一题列表,请点击这里:正点原子每日一题


这篇文章对const关键字讲解非常详细。。大家一定要仔细阅读。


下面程序段,下面哪个语句是正确的?
  1. int tmp = 66;
  2. int *const age = &tmp;
  3. int newage = 23;

  4. 第一个语句:*age=newage;
  5. 第二个语句: age = &newage;
复制代码


答案请回复本帖,如果做错了,或者没有理解好的,请看下面的内容,讲解非常经典,也非常实用。


游客,如果您要查看本帖隐藏内容请回复


--------------------------------------------------------------------------------------------------------------------------------------------------
const 是 constant 的缩写,意思是“恒定不变的”!它是定义只读变量的关键字,或者说 const 是定义常变量的关键字。
说 const 定义的是变量,但又相当于常量;说它定义的是常量,但又有变量的属性,所以叫常变量。用 const 定义常变量的方法很简单,就在通常定义变量时前面加 const 即可,如:
  1. const  int  a = 10;
复制代码

const 和变量类型 int 可以互换位置,二者是等价的,即上条语句等价于:
  1. int  const  a = 10;
复制代码

那么用 const 修饰后和未修饰前有什么区别呢?它们不都等于 10 吗?
用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。
如果定义的时候未初始化,我们知道,对于未初始化的局部变量,程序在执行的时候会自动把一个很小的负数存放进去。这样后面再给它赋初值的话就是“改变它的值”了,即发生语法错误。
用 const 修饰的变量,无论是全局变量还是局部变量,生存周期都是程序运行的整个过程。全局变量的生存周期为程序运行的整个过程这个是理所当然的。而使用 const 修饰过的局部变量就有了静态特性,它的生存周期也是程序运行的整个过程。我们知道全局变量是静态的,静态的生存周期就是程序运行的整个过程。但是用const修饰过的局部变量只是有了静态特性,并没有说它变成了静态变量。
我们知道,局部变量存储在栈中,静态变量存储在静态存储区中,而经过 const 修饰过的变量存储在内存中的“只读数据段”中。只读数据段中存放着常量和只读变量等不可修改的量。
前面说过,数组的长度不能是变量。虽然 const 定义的是只读变量,就相当于是定义一个常量。但是只读变量也是变量,所以 const 定义的变量仍然不能作为数组的长度。但是需要注意的是,在 C++ 中可以!C++ 扩展了 const 的含义,在 C++ 中用 const 定义的变量也可作为数组的长度。


什么是const?
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:)
为什么引入const?
const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。
const关键字使用非常的灵活,这一点和php差别很大,php中const用来在类中定义一个常量,而在c中,const因位置不同有不同的作用,因情景不同有不同的角色,使用起来也是非常的灵活。
(1):const用来修饰普通的变量(指针变量除外)的时候,const type name type const name 这两种形式是完全等价的,都表示其是常量,不能进行修改。
  1. #include <stdio.h>
  2. int main(){
  3.   const int num =23;
  4.   printf("result=%d\n",num);
  5.   num =31;
  6.   printf("result=%d\n",num); //报错,num是常量,不能修改
  7. }
复制代码

(2):const用来修饰指针变量的时候,分为以下四种情况
1、const type *name :这种情况下,const修饰的指针变量name所指向的type类型对象,也就是说指向的这个对象是不能进行修改的,因为其是常量,而指针变量确实可以进行修改的
  1. #include <stdio.h>
  2. int main(){
  3.   int tmp = 23;
  4.   const int *num = &tmp;
  5.   printf("result=%d\n",*num);   
  6.   (*num) = 24; //报错,因为指针num指向的int类型的对象是不能进行修改的
  7.   printf("result=%d\n",*num);
  8. }
复制代码

2、 type const *name :这种情况下,const修饰的指针变量name所指向的type类型对象,意思完全同上,只是颠倒了以下顺序。
  1. #include <stdio.h>
  2. int main(){
  3.   int tmp = 23;
  4.   int const* num = &tmp;
  5.   printf("result=%d\n",*num);   
  6.   (*num) = 24; //报错,因为指针num指向的int类型的对象是不能进行修改的
  7.   printf("result=%d\n",*num);
  8. }
复制代码

3、type * const name :这种情况下,const修饰的指针变量name,也就是说这个指针变量的值是不能进行修改的,但是指针变量所指向的对象确实可以修改的
  1. #include <stdio.h>
  2. int main(){
  3.   int tmp = 100;
  4.   int *const num = &tmp;
  5.   printf("result=%d\n",*num);  
  6.   int change = 23;
  7.   num = &change; //报错,因为指针num是不能进行修改的
  8.   printf("result=%d\n",*num);
  9. }
复制代码

4、const type * const name :这种情况下,const修饰的指针变量name以及指针变量name所指向的对象,也就是说这个指针变量以及这个指针变量所指向的对象都是不能进行修改的
(3):const在函数中的参数的作用:
  1. void get_value( const int num ){
  2.   num=23; //报错
  3. }
复制代码

调用get_value()函数的时候,传递num参数到函数,因为定义了const,所以在函数中num是不能进行修改的



我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-6-6
在线时间
0 小时
发表于 2020-6-6 16:24:03 | 显示全部楼层
谢谢楼主!!!学习了
回复 支持 反对

使用道具 举报

1

主题

20

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2020-5-23
在线时间
9 小时
发表于 2020-6-6 16:33:30 | 显示全部楼层
第二个语句
回复 支持 反对

使用道具 举报

27

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-8-31
在线时间
252 小时
发表于 2020-6-6 16:50:53 | 显示全部楼层
第一个
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-6-6
在线时间
0 小时
发表于 2020-6-6 18:54:41 | 显示全部楼层
11111111111111
回复 支持 反对

使用道具 举报

9

主题

120

帖子

0

精华

高级会员

Rank: 4

积分
700
金钱
700
注册时间
2020-5-11
在线时间
67 小时
发表于 2020-6-6 22:15:42 | 显示全部楼层
前来学习,个人感觉第二个
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-6-6
在线时间
0 小时
发表于 2020-6-6 22:35:47 | 显示全部楼层
第一个
回复 支持 反对

使用道具 举报

15

主题

512

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3154
金钱
3154
注册时间
2016-1-14
在线时间
367 小时
发表于 2020-6-7 09:10:47 | 显示全部楼层

学习学习
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2018-5-12
在线时间
8 小时
发表于 2020-6-7 10:29:53 | 显示全部楼层
第二个
回复 支持 反对

使用道具 举报

4

主题

91

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1091
金钱
1091
注册时间
2017-11-7
在线时间
311 小时
发表于 2020-6-7 17:45:43 来自手机 | 显示全部楼层
学习时间。
回复 支持 反对

使用道具 举报

0

主题

31

帖子

0

精华

高级会员

Rank: 4

积分
653
金钱
653
注册时间
2017-5-29
在线时间
139 小时
发表于 2020-6-7 23:36:03 | 显示全部楼层
第一句是正确时
回复 支持 反对

使用道具 举报

5

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
432
金钱
432
注册时间
2020-5-8
在线时间
66 小时
发表于 2020-6-7 23:41:33 | 显示全部楼层
答案是23
回复 支持 反对

使用道具 举报

0

主题

29

帖子

0

精华

高级会员

Rank: 4

积分
671
金钱
671
注册时间
2012-2-24
在线时间
226 小时
发表于 2020-6-8 08:21:11 来自手机 | 显示全部楼层
第二个是正确的
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
349
金钱
349
注册时间
2020-5-16
在线时间
52 小时
发表于 2020-6-8 08:24:34 | 显示全部楼层
答案答案
回复 支持 反对

使用道具 举报

5

主题

269

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1050
金钱
1050
注册时间
2020-5-11
在线时间
252 小时
发表于 2020-6-8 09:29:44 | 显示全部楼层
第二局
回复 支持 反对

使用道具 举报

0

主题

87

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2018-4-20
在线时间
478 小时
发表于 2020-6-8 10:37:40 | 显示全部楼层
222222
回复 支持 反对

使用道具 举报

0

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2020-4-3
在线时间
29 小时
发表于 2020-6-8 15:18:57 | 显示全部楼层
第一句,正确
第二句,错误
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2018-10-23
在线时间
10 小时
发表于 2020-6-8 15:33:15 | 显示全部楼层
查看答案
回复 支持 反对

使用道具 举报

18

主题

89

帖子

0

精华

高级会员

Rank: 4

积分
798
金钱
798
注册时间
2016-5-12
在线时间
172 小时
发表于 2020-6-8 18:40:44 | 显示全部楼层
22222222
回复 支持 反对

使用道具 举报

0

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2015-10-21
在线时间
87 小时
发表于 2020-6-8 19:05:20 | 显示全部楼层
666666
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-6-8
在线时间
1 小时
发表于 2020-6-8 19:53:10 | 显示全部楼层
你、卡时代峻峰
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2013-5-22
在线时间
9 小时
发表于 2020-6-8 22:28:26 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2020-6-8
在线时间
7 小时
发表于 2020-6-9 08:04:31 来自手机 | 显示全部楼层
333333
回复 支持 反对

使用道具 举报

15

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-8-27
在线时间
44 小时
发表于 2020-6-9 08:43:11 | 显示全部楼层
学习了,之前有一次面试就是问const,当时连const是什么都不知道....
回复 支持 反对

使用道具 举报

1

主题

22

帖子

0

精华

高级会员

Rank: 4

积分
933
金钱
933
注册时间
2018-3-29
在线时间
139 小时
发表于 2020-6-9 09:01:39 | 显示全部楼层
1111111111
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2019-4-24
在线时间
73 小时
发表于 2020-6-9 10:41:24 | 显示全部楼层
1.3.6应该吧
回复 支持 反对

使用道具 举报

5

主题

54

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2020-5-25
在线时间
85 小时
发表于 2020-6-9 10:50:55 | 显示全部楼层
11111111111111
回复 支持 反对

使用道具 举报

0

主题

60

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3163
金钱
3163
注册时间
2020-4-9
在线时间
291 小时
发表于 2020-6-9 13:38:25 | 显示全部楼层
第一个语句
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-1-14
在线时间
12 小时
发表于 2020-6-9 14:19:50 | 显示全部楼层
第一个语句
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-5-25
在线时间
15 小时
发表于 2020-6-9 16:09:08 | 显示全部楼层
第一个语句正确
回复 支持 反对

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2019-9-22
在线时间
35 小时
发表于 2020-6-9 17:09:42 | 显示全部楼层
第二个语句
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2017-6-21
在线时间
38 小时
发表于 2020-6-9 22:34:27 | 显示全部楼层
开始每日签到,努力学习
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-5-8
在线时间
10 小时
发表于 2020-6-10 11:08:44 | 显示全部楼层
11111111
回复 支持 反对

使用道具 举报

36

主题

245

帖子

0

精华

高级会员

Rank: 4

积分
771
金钱
771
注册时间
2016-9-10
在线时间
305 小时
发表于 2020-6-10 12:00:23 | 显示全部楼层
111111111111111111111111111111
回复 支持 反对

使用道具 举报

0

主题

63

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3867
金钱
3867
注册时间
2015-8-26
在线时间
285 小时
发表于 2020-6-10 13:15:54 | 显示全部楼层
答案看看啊。。
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2018-6-7
在线时间
8 小时
发表于 2020-6-10 16:44:13 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2018-9-23
在线时间
6 小时
发表于 2020-6-11 09:34:07 | 显示全部楼层
第一个。但理不清一个思路顺畅的解释出来。
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2018-4-24
在线时间
61 小时
发表于 2020-6-11 10:15:51 | 显示全部楼层
2222222222
回复 支持 反对

使用道具 举报

4

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
643
金钱
643
注册时间
2020-2-26
在线时间
79 小时
发表于 2020-6-11 16:37:08 | 显示全部楼层
第一个
回复 支持 反对

使用道具 举报

0

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2019-8-15
在线时间
64 小时
发表于 2020-6-12 09:05:39 | 显示全部楼层
第二个
回复 支持 反对

使用道具 举报

1

主题

49

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1340
金钱
1340
注册时间
2019-12-27
在线时间
266 小时
发表于 2020-6-12 09:15:43 | 显示全部楼层
学习学习学习
回复 支持 反对

使用道具 举报

20

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2012-2-11
在线时间
24 小时
发表于 2020-6-12 10:28:05 | 显示全部楼层
好东西
回复 支持 反对

使用道具 举报

9

主题

108

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2013-7-16
在线时间
80 小时
发表于 2020-6-12 10:51:51 | 显示全部楼层
第一个正确
回复 支持 反对

使用道具 举报

2

主题

17

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-6-14
在线时间
11 小时
发表于 2020-6-12 14:05:06 | 显示全部楼层
第一个语句对
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2020-5-4
在线时间
11 小时
发表于 2020-6-12 16:21:40 | 显示全部楼层
回复 支持 反对

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2018-8-16
在线时间
327 小时
发表于 2020-6-12 16:29:22 | 显示全部楼层
第一个。
因为声明的指针式指针本身指向的地址为const,而不是地址的内容为const
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
333
金钱
333
注册时间
2015-2-9
在线时间
92 小时
发表于 2020-6-12 16:43:19 | 显示全部楼层
第一个对
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2017-7-11
在线时间
7 小时
发表于 2020-6-12 20:19:00 | 显示全部楼层
学习happy
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-6-27
在线时间
19 小时
发表于 2020-6-13 21:41:56 | 显示全部楼层
第一个1
回复 支持 反对

使用道具 举报

0

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
578
金钱
578
注册时间
2018-4-16
在线时间
106 小时
发表于 2020-6-15 09:12:41 | 显示全部楼层
第一个语句,其实我觉得都不对
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 05:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表