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

版权声明:本博客内容来自于个人学习过程中的总结,参考了互联网以及书本、论文等上的内容,仅供学习交流使用,如有侵权,请联系我会重写!转载请注明地址! https://blog.csdn.net/Reborn_Lee/article/details/82823253

之前有过一篇博文: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 和 * 的组合通常只用于在数组形式的参数中模拟传值调用。它声称“我给你一个指向它的指针,但你不能修改它。”

猜你喜欢

转载自blog.csdn.net/Reborn_Lee/article/details/82823253