C里面的const

         const是C语言里面的关键字,用来限定一个不被改变的变量。可以在一定程度上提高程序的安全性和可靠性。

         const只修饰其后的变量,至于const放在类型前还是类型后并没有区别。例如const type biaozhifu 和type const biaozhifu 都是可以的,const都是用来限定标识符biaozhifu的,其中type是biaozhifu的数据类型。

/**********************************************
*函数功能:测试const用法。
**********************************************/
#include<stdio.h>
int main(void)
{
    const char me;
    printf("%X\n",&me);
    char const you;
    printf("%X\n",&you);
    return 0;
}

其结果如下:


        const和指针一起使用是C语言中一个很常见的困惑之处。

第一种情况:const int *p1 ,在这种情况下p1的值可以改变,即p1可以进行转向指向其他地址,而*p1是不可以改变的,即不能通过*p1修改原来存储的值。

/**********************************************
函数功能:测试const用法。
**********************************************/
#include<stdio.h>
int main(void)
{
    int me=0;
    int you=1;
    const int *p1;//此时p1可有指向其他地址,但是*p1不能改变原来存储的值

    p1=&me;
    printf("%X\n",p1);
    p1=&you;
    printf("%X\n",p1);

    return 0;
}

运行结果如下:


当尝试着修改函数体内语句为:*p1=3;时,编译就会报错:D:\书籍\C\C语言入门\test1.c|14|error: assignment of read-only location '*p1'。


第二种情况:int *const p2=&me ,在这种情况下,p2的值不能改变,即p2不能够重新转向指向其他位置,但是*p2可以改变,即可以通过*p2修改原来存储的值。

/**********************************************
函数功能:测试const用法。
**********************************************/
#include<stdio.h>

int main(void)
{
    int me=0;
    int you=1;
    int *const p2=&me;//p2不可以改变,即不能指向其他地址,但是可以用*p2修改原来存储的值
    *p2=3;
    printf("%X\n",*p2);

    return 0;
}

运行结果如下:


当尝试修改函数体内语句为:p2=&you; 时,编译会报错:D:\书籍\C\C语言入门\test1.c|12|error: assignment of read-only variable 'p2'。


第三种情况:const int *const p3=&me; 在这种情况下p3不能被改变,即p3不能重新转向指向其他地址,*p3也不能被改变,即不能通过*p3修改原来存储的值。

/**********************************************
函数功能:测试const用法。
**********************************************/
#include<stdio.h>


int main(void)
{
    int me=0;
    int you=1;
    const int *const p3=&me;//p3不可以改变,即不能重新转向,*p3不可以修改原来存储的值
    printf("%X\n",p3);
    printf("%X\n",*p3);
    return 0;
}

运行结果如下:


在这种情况下,如果修改函数体内语句为:p3=&you; 或者*p3=4; 时,编译都会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值