const申明

const申明变量,放在变量类型之前,表示此变量不可改变。C语言和C++中的const又有着不一样的意义。

C++const常量玩出新花样_java

举个栗子:

         const int a = 10;

         int *p = &a;

这段代码在C语言下不会报错,但在C++下会提示,无法从“const int *”转换为“int *”,那么咱们把C++的&a强转为int*试试,int*p = (int*)&a;嗯,可以运行了,然后在后面修改一下*p的值,然后输出看一下。

            *p = 2;

在C语言下输出值为:

C++const常量玩出新花样_java_02


在C++下输出值为:

C++const常量玩出新花样_java_03

为什么C语言里能通过指针修改变量的值,C++里面却不行呢,既然修改不了那么2是存在哪里的,什么时候分配的空间?

总结:在C语言中编译器会为常量分配内存,但是在使用常量的时候,常量会被立即数替换(保护常量,防止被破坏性修改)。

在C++中对于基本类型的常量,编译器并不为其分配存储空间,编译器会把它放到符号表,当取符号常量的地址等操作时,将强迫编译器为这些常量分配存储空间,编译器会重新在内存中创建一个它的拷贝, 通过地址访问到的就是这个拷贝而非原始的符号常量。


还有一点,C语言的常量不能用来确定数组的大小,但是C++的常量是可以用来确定数组的大小的。

const int a = 10;

int arr[a];

请大家自己测试一下,我这里只介绍了大概的情况,更多的可以自己去发掘哦!