一、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常量是由编译器处理的,提供类型检查和作用域检查,宏定义由预处理器处理,单纯的文本替换。