1. c语言的canst:
小结: 可以发现c中const 定义的常量,只有可读属性,但却可以通过指针在栈上来改变值,本质上还是变量。
只有enum是可以定义常量。
在c++中就不行,c=0;
2.c++const
小结:c++ 中C++在C的基础上对const进行了进化处理 当碰到const声明时在符号表中放入常量
编译过程中若发现使用常量则直接以符号表中的值替换。
编译过程中若发现下述情况则给对应的常量分配存储空间
对const常量使用了extern
对const常量使用&操作符
注:C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。
(分配了控件自然可以对其中的值操作啦,不过不是对const 的c。只是对应其地址的值,不等同于c)
3.例子
#include <stdio.h>
void f()
{
#define a 3
const int b = 4;
}
void g()
{
printf("a = %d\n", a);
//printf("b = %d\n", b);
}
int main()
{
const int A = 1;
const int B = 2;
int array[A + B] = {0};
int i = 0;
for(i=0; i<(A + B); i++)
{
printf("array[%d] = %d\n", i, array[i]);
}
f();
g();
return 0;
}
在C的编译器不通过,原因是因为const 变量只有可读属性。
在C++的编译器中通过了,原因是因为C++编译器将他转化成常量表替代了。
下面看看它和宏定义的区别:
同样是上面的程序,看看为什么cpp编译的适合不报错呢?(我在g()中调用的c()的局部变量)只是被处理器处理
答: 宏不谈作用域。
取消上面g()的注释发现报错,这是为什么。
答: const常量是由定义域的区分的。被编译器处理
小结:
1.const (c到c++)
2.宏和const(在c++的区别)