zoukankan      html  css  js  c++  java
  • Linux C/C++——const

    1.定义

      在C/C++中,const通常被用来声明一个变量为常量,用法:const int a = 100,但在C和C++中,const还是有些区别。

    2.在C语言中

    ①C语言中const修饰的局部变量虽然我们不能直接修改,但我们可以通过地址来进行修改。

    #include <stdio.h>
    void
    test01() { const int a = 100; //const修饰的局部变量是放在栈区的,不能直接被修改,但可以通过地址修改 int *p = &a; *p = 10; printf("%d ",a); } int main(int argc, char const *argv[]) { test01(); return 0; }

    从上面的运行结果我们可以看到,在C语言中const修饰的局部变量虽然我们不能直接修改,但我们可以通过地址来进行修改。

    ②如果const修饰的是全局变量,那接无法修改了,会发生错误,无论是直接修改还是通过地址间接修改,都改不了。

    #include<stdio.h>
    const int b = 100;//const修饰的全局变量不能被修改
    void test02()
    {
        int *p = &b;
        *p = 10;
        printf("%d
    ",b);
    }
    
    int main(int argc, char const *argv[])
    {
        test02();
        return 0;
    }

    但在C语言中,如果const修饰的是全局变量,那接无法修改了,会发生错误,无论是直接修改还是通过地址间接修改,都改不了。

    ③如果其他文件想要使用这个const修饰的变量,直接用extern修饰即可。

    const_in_c.c主程序

    #include<stdio.h>
    extern const int num;
    void test03()
    {
        printf("%d
    ",num);
    }
    
    int main(int argc, char const *argv[])
    {
        test03();
        return 0;
    }

    c_test.c这个程序的num变量,被主程序调用

    const int num = 12;

    再写一个Makefile,编译上面两个程序

    const:const_in_c.o c_test.o
        gcc -o const const_in_c.o c_test.o
    const_in_c.o:const_in_c.c
        gcc -c const_in_c.c
    c_test.o:c_test.c
        gcc -c c_test.c

    运行结果

    如果其他文件想要使用这个const修饰的变量,直接用extern修饰即可。

    3.在C++中

    ①在C++中,const修饰的局部变量放在符号表中,不管直接还是通过地址都是无法修改它的值的。

    #include<iostream>
    using namespace std;
    void test01()
    {
        const int a = 100;
        int *p = (int *)&a;
        *p = 10;
        printf("%d
    ",a);
    }
    int main(int argc, const char** argv) {
        test01();
        return 0;
    }

    运行结果我们可以看出,会报错,所以是无法修改的。

    ②const修饰的全局变量放在常量区,它的值无法被修改。

    #include<iostream>
    using namespace std;
    const int  b = 100;
    void test02()
    {
        int *p = (int *)&b;
        *p = 10;
        printf("%d
    ",b);
    }
    int main(int argc, const char** argv) {
        test02();
        return 0;
    }

    也同样是发生错误,因为C++中const修饰的全局变量的值是无法被修改的。

    ③const修饰的变量默认是内部链接属性,用extern修饰可以将其改成外部链接属性。

     const_in_c++.cpp

    #include <iostream>
    using namespace std;
    extern const int num;
    void test03()
    {
        printf("%d
    ",num);
    }
    int main(int argc, const char** argv) {
        test03();
        return 0;
    }

    c++test.cpp

    extern const int num = 99;

    运行结果

    3.总结一下

    在C语言中:

    ①const修饰的局部变量虽然我们不能直接修改,但我们可以通过地址来进行修改。

    ②const修饰的是全局变量,那接无法修改了,会发生错误,无论是直接修改还是通过地址间接修改,都改不了。

    ③如果其他文件想要使用这个const修饰的变量,直接用extern修饰即可。

    在C++中:

    ①在C++中,const修饰的局部变量放在符号表中,不管直接还是通过地址都是无法修改它的值的。

    ②const修饰的全局变量放在常量区,它的值无法被修改。

    ③const修饰的变量默认是内部链接属性,用extern修饰可以将其改成外部链接属性。

  • 相关阅读:
    1.8 Hello World添加menu
    1.7 HelloWorld 添加视图
    1.6 Hello World
    1.5 组件开发基础
    awk
    sed
    grep / egrep
    Shell基础知识
    和管道符有关的命令
    Shell变量
  • 原文地址:https://www.cnblogs.com/953-zjf/p/const.html
Copyright © 2011-2022 走看看