C语言的const限定符

        const限定的内容真的无法修改吗?

        关键字const并不能把变量变成常量。在一个符号前加上const限定符只是表示这个符号不能被赋值,也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序的内部(或外部)来修改这个值。

        上代码,测试:

#include <stdio.h>

int main(void)
{
    const int a = 10;               // const 限定

    int *pa = &a;                   // 使用未限定的指针指向a

    printf("a = %d; (*pa) = %d\n", a, *pa);

    *pa = 20;                       // 通过指针来修改const限定的值

    printf("a = %d; (*pa) = %d\n", a, *pa);

    return 0;
}

        gcc编译一下(gcc 4.8.2 Ubuntu14.04 64bit)

$ gcc 02.c
02.c: In function ‘main’:
02.c:7:12: warning: initialization discards ‘const’ qualifier from pointer target type [enabled by default]
  int *pa = &a;     // 使用未限定的指针指向a

        编译时出现了警告。

        然后执行程序:

$ ./a.out 
a = 10; (*pa) = 10
a = 20; (*pa) = 20

        被const限定的a的值,通过一个指向它的指针被修改了。

转载于:https://my.oschina.net/lowkey2046/blog/339989

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值