【 C 】const 进一步解读(由switch引出)
之前有过一篇博文: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
- 点赞
- 收藏
- 关注作者
评论(0)