const深度分析

const属于变量属性的一种。使用const修饰的变量,意味着该变量是一个只读变量,不能随意的修改该变量的值。但并不意味着,通过const的修饰,该变量就变成了常量,本意上并非常量,只是一个只读变量。

创新互联公司专业为企业提供井陉网站建设、井陉做网站、井陉网站设计、井陉网站制作等企业网站建设、网页设计与制作、井陉企业网站模板建站服务,10年井陉做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

int main(){

            const int apple = 1;

            apple = 2;   //error

            system ( "pause" );
            return 0;
}

此时,通过const修饰变量apple,此时就是只读变量(read only variable)。那么是否,该内存中的值真的无法改变。事实并非如此。我们可以通过声明指针指向该内存空间,通过这个指针,我们是能够修改变量的值的。代码如下:

int main(){

const int apple = 1;
int* p = NULL;
p = ( int* )&apple;

printf ( "apple = %d\n", apple );

*p = 2;
printf ( "apple = %d\n", apple );

system ( "pause" );
return 0;
}

我们通过这个指针变量修改了内存中的值。
当我们通过const来修饰一个全局变量时,它同样是一个只读变量,无法直接修改其值。

    const int glo_apple = 3;

    int main()
    {
        glo_apple = 4;  //error

    system ( "pause" );
    return 0;
    }

很显然,由于glo_apple是只读变量,在主函数中是无法修改其值的。那么,我们是否可以用同样的方式,声明一个指针指向全局变量,对全局变量glo_apple进行操作呢?

const int glo_apple = 3;
    int main()
    {
        int* glo_p = ( int* ) &glo_apple;

        *p = 4;   //error
        printf ( "glo_apple = %d\n", glo_apple ) ;

    system ( "pause" );
    return 0;
    }

如果将这段代码用现代编译器编译一下,会发现,程序会报错。为什么呢?原因就在于,用const修饰的全局变量被存放在了“只读存储区”了。用指向全局变量的指针去修改内存中的值肯定会报错。
注意:现代C编译器中的const将具有全局生命周期的变量存储于只读存储区。(比如static局部变量也是具有全局生命周期,所以,用const修饰的static局部变量也是存储于只读存储区)
注意:由于字符串字面量被存储于只读存储区,也就是说,该值是不希望也不能被改变的,所以需要使用const来修饰指针变量指向字符串字面量。例如:
const char p = "chentong";
另外,用const修饰的函数参数,说明不希望在函数内部修改参数的值。用const修饰函数返回值,说明函数的返回值不可变,多用于返回指针的类型。比如,有如下代码:

    #include 
    #include 

    const char* f ( const int i ){
        i = 4;    //error;
        return "chentong";
    }
    int main()
    {
    const int* p = f( 2 );

    printf ( "%s\n", p );

    pc[4] = 'o'; //error

    printf ( "%s\n", p );

    system ( "pause" );
    return 0;
    }

首先,函数的参数i不能在函数内部被修改,因为它是一个被const修饰的只读变量。其次,函数的返回值类型是一个const类型的,也就是意味着,函数返回值不可修改,是个只读变量,因此,在用指针指向这个函数时,需要用const来修饰该指针。而且,不能通过指针去修改函数的返回值。


网页名称:const深度分析
本文地址:http://bzwzjz.com/article/jhipie.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都响应式网站建设 成都定制网站建设 网站建设改版 重庆网站建设 成都网站建设 网站建设开发 定制级高端网站建设 成都网站设计 成都网站设计制作公司 成都网站建设流程 四川成都网站建设 高端网站设计 成都网站建设公司 成都营销网站制作 营销型网站建设 网站制作 企业网站设计 成都网站设计公司 移动网站建设 高端品牌网站建设 手机网站建设 成都网站制作