C/C++中的const

一、C语言中的const

1、基础知识

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int k = 0;
    const int a = 0;//代表一个常整形数
    int const b = 1;//同上
    const int *c = &a;//c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改)
    int const *d = &a;// 同上
    c = &b;
    d = &b;
    int * const e = &k; //常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)
    *e = 3;
    const int * const f = &k;//一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改)

    return 0;
}

2、扩展

#include <stdio.h>

int main()
{
    const int a = 1;
    int* b =(int*) &a;
    *b = 2;
    printf("*b:%d\n",*b);
    printf("a:%d\n",a);
    return 0;
}
输出结果

*b:2
a:2

       分析:从这里可以看出a的值被修改了,在C语言中用const去修饰整形变量a,即a的值是不可变的,不能显式地通过赋值语句去改变a的值,但是不代表在程序中不能通过其它方法来修改这个值。

二、C++中的const

#include<iostream>
using namespace std;

int main(void)
{
    const int a=3;
    int* b=(int*)&a;
    *b=4;
    cout << *b << endl;
    cout << a << endl;
    return 0;
}
输出结果:

4

3

分析:C++编译器对const常量的处理:当碰见常量声明时,在符号表中放入常量。编译过程中若发现使用常量则直接以符号表中的值替换。编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C)。注意:程序中若打印&a与b的值应该是相同的。

 

    另外,C++中的const常量类似于宏定义,const int c = 5; ≈ #define c 5;C++中的const常量在与宏定义不同:const常量是由编译器处理的,提供类型检查和作用域检查,宏定义由预处理器处理,单纯的文本替换。

 

 

 

 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值