【 C 】const 进一步解读(由switch引出)

举报
李锐博恩 发表于 2021/07/15 08:02:56 2021/07/15
【摘要】 之前有过一篇博文:const 学习笔记,可是读《C专家编程》时候,遇到const还是会感到有点陌生,疑惑。可见,有必要进一步强调一些内容。 首先给出一个案例来引出本文: const int two = 2; switch( i ){ case 1: printf("case 1\n"); case two: printf("case 2\n"); case 3: prin...

之前有过一篇博文:const 学习笔记,可是读《C专家编程》时候,遇到const还是会感到有点陌生,疑惑。可见,有必要进一步强调一些内容。

首先给出一个案例来引出本文:


  
  1. const int two = 2;
  2. switch( i ){
  3. case 1: printf("case 1\n");
  4. case two: printf("case 2\n");
  5. case 3: printf("case 3\n");
  6. default: ;
  7. }

出现这段语句的程序能不能编译通过呢?

我们测试一下:


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i;
  5. const int two = 2;
  6. printf("Enter the number of i: ");
  7. scanf("%d", &i);
  8. switch( i )
  9. {
  10. case 1:
  11. printf("case 1\n"); break;
  12. case two:
  13. printf("case 2\n"); break;
  14. case 3:
  15. printf("case 3\n"); break;
  16. default:
  17. ;
  18. }
  19. return 0;
  20. }

编译,运行,提示如下错误:

case label does not reduce to an integer constant|


如果把语句:    const int two = 2; 改成:#define two 2的话,就没有错误,这就说明了const 关键字并不真正表示常量。

不要以为在变量定义的前面加上const就会把变量变成常量,上例也说明了这个问题,并不能成功。

const的用法是:

在一个符号前加上const限定符只是表示这个符号不能再被赋值,也就是改变当前值,也就是它的值对于这个符号来说是只读的。

const最有用之处就是用它来限定函数的形参,这样函数将不会修改实参指针所指向的数据。

const可以用在数据上,如:

const int limit = 10;

但当你把const 和指针操作符(间接操作符*)一起使用时,就有点难度且更有意思了。

想了解更多参见:【 C 】const 学习笔记

这里给出一个例子:

const int *limitp = &limit;

int i = 27;

limitp = &i;

分析:第一条语句的意思是limitp这个指针指向的值被限定为const,不能改变了,只能访问,但是指针本身是可以改变的,这样运行第2、3条语句,该指针就指向了不同的地址,对它进行间接访问操作就可以得到一个不同的值了。

const 和 * 的组合通常只用于在数组形式的参数中模拟传值调用。它声称“我给你一个指向它的指针,但你不能修改它。”

 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/82823253

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。