• C语言 const详解


    一、const 修饰的常变量

    我们知道变量是可以改变的,如下示例

    int main() {
    	int n = 1;
    	n = 2;//用2赋值n,也就说变量n从1变成了2
    	printf("%d", n);//打印2
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    但是如果在变量前加一个const呢?
    大家可以对比一下我加const前和const后编译器的变化

    加const前:没有报错信息
    在这里插入图片描述

    加const后:有报错信息
    在这里插入图片描述

    他提示你表达式必须是可修改的左值,也就是说被const修饰后的变量就不可修改了
    在这里插入图片描述

    特别说明:
    在这里插入图片描述
    在C99标准前,数组的大小只能是常量。笔者这里用的编译器是VS2017,对C99标准支持的不是很好,所以这里报错了。

    那么我们是不是在n之前加一个const,就不会报错呢?
    在这里插入图片描述
    如上图,加了const后依旧会报错,这就说明了一件事:
    被const修饰的变量只是不能改变了,但是他本质仍然是个变量,不是常量

    二、const 修饰指针

    虽然我们上面说,我们const修饰了的变量,变量就不能改变了。
    但是我们也是可以用指针来改变变量的值的。

    int main()
    {
    	const int num = 10;//num是常变量(本质还是一个变量,但是不可修改了)
    	//num = 1;//被const修饰过,你再想修改就会报错
    
    	int* p = #
    	*p = 20;
    	printf("%d\n", num);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    上面的代码其实就是利用了const的漏洞,不直接修改变量值,但是可以通过该变量的指针进行修改。
    有没有办法填补这个漏洞?也是有的,就是const修饰指针。

    在这里插入图片描述

    const修饰指针,const放在*的左边,修饰的是指针所指向的内容(*p),指针所指向的内容,不能通过指针来改变了,但是指针变量本身是可以改变的。
    ps:const int * p和int const * p是等价的,都是const在 * 号左边

    但是,如果你把const放在*右边,情况又不一样了。
    在这里插入图片描述
    const放在 * 右边,修饰的是指针变量本身p,指向的内容(*p)可以改变,但是指针变量p不可修改。

  • 相关阅读:
    Netstat 命令详解
    给nginx部署https及自签名ssl证书
    CUDA C并行编程:开发环境搭建
    vue 修改 el-cascader 面板的样式
    HTML5+CSSDAY4综合案例一--热词
    软件运维常见面试题
    Http实战之Wireshark抓包分析
    LeetCode117. Populating Next Right Pointers in Each Node II
    CMU 15-445 数据库课程第四课文字版 - 存储2
    根据excel批量修改文件夹及其文件名称
  • 原文地址:https://blog.csdn.net/m0_57180439/article/details/126179535