C语言——const关键字

在c语言中的const是一个比较有意思的存在,明明一点作用都不起,但是却作为一个关键字离奇存在。

值得注意的是,在C++中优化了const的用法,这里只针对C语言中的const用法,写一下自己的看法。

第一种 const int a

const int a和 int const a表达效果一致。

//采用ubuntu16.04 gcc编译
#include<stdio.h>
int main()
{
    const int a = 10;
    //a = 20; 这里直接修改会报错,因为a是const类型
    int *p = (int*)(&a);//可以通过指针进行修改const变量
    *p = 20;
    printf("a=%d\n",a);
    return 0;
}

注意:在gcc编译器中,没有int* 的强制类型转换会存在程序报错的可能。

第二种 const int *p = &a

#include <stdio.h>
int main()
{
    int a = 10;
    int b = 100;
    const int *p =&a;
    // *p = 20;不能修改指针指向的地址的值
    p = &b;//可以修改指针的指向
    printf("*p = %d \n",*p);
    return 0;
}

第三种 int * const p = &a

#include <stdio.h>
int main()
{
    int a = 10;
    int b = 20;
    int *const p = &a;
    //   p=&b; //不能修改指针的指向
    *p = 100;//可以修改指针指向的值
    printf("*p=%d\n", *p);
    return 0;
}

第四种 const int * const p =&a;

理论上来说,这种既不能修改指针的指向,也不能修改指针指向地址的值,但是通过二级指针,仍然可以起到修改*p 的效果。

总结:const在C语言中几乎是一个没有作用的存在。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值