一、const基础知识(用法、定义、好处)
1、
const int a; int const b;
两者意思一样,代表一个整形常数
const int *c; //c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改
int * const d; //d 常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)
const int * const e ; //e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改)
2、使用const的好处
1)指针做函数参数,可以有效的提高代码可读性,减少bug;
2)清楚的分清参数的输入和输出特性
二、c与C++对const整形常数的不同操作
int main() { const int a = 10; int *p = (int*)&a; printf("a = %d\n", a); *p = 11; printf("a = %d\n", a); return 0; }
C中的输出结果是10 、11
C++中两次的输出结果都是10
解释:
C++编译器对const常量的处理
C++编译过程中若发现使用常量则直接以符号表中的值替换
编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C)
结论:
C语言中的const变量
C语言中const变量是只读变量,有自己的存储空间
C++中的const常量
可能分配存储空间,也可能不分配存储空间
当const常量为全局,并且需要在其它文件中使用
当使用&操作符取const常量的地址
三、C++中const与define的区别
C++中的const常量类似于宏定义
const int c = 5; ≈ #define c 5
C++中的const常量在与宏定义不同
const常量是由编译器处理的,提供类型检查和作用域检查
宏定义由预处理器处理,单纯的文本替换
void fun1() { #define a 10 const int b = 20; //#undef } void fun2() { printf("a = %d\n", a); //printf("b = %d\n", b); } int main(int argc, char *argv[]) { fun1(); fun2(); return 0; }
1、在func1定义a,在func2中能使用吗?
2、在func1中定义的b,在func2中能使用吗?