【 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还是会感到有点陌生,疑惑。可见,有必要进一步强调一些内容。

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


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

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

我们测试一下:


      #include <stdio.h>
      int main()
      {
      int i;
      const int two = 2;
      printf("Enter the number of i: ");
      scanf("%d", &i);
      switch( i )
       {
      case 1:
      printf("case 1\n"); break;
      case two:
      printf("case 2\n"); break;
      case 3:
      printf("case 3\n"); break;
      default:
       ;
       }
      return 0;
      }
  
 

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

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个月内不可修改。