C/C++常量转换

/* * File: main.cpp * Author: Vicky */ #include <iostream> using namespace std; /** * 类型转换之:常量转换 */ int main(int argc, char** argv) { const int i = 10; // int *p1 = &i; // 错误,无法这样赋值,或者说转换! int *pi = const_cast<int*> (&i); // 常量转换,或者理解为赋值 cout << &i << endl; cout << pi << endl; cout << i << endl; cout << *pi << endl; cout << "------" << endl; *pi = 20; cout << &i << endl; cout << pi << endl; cout << i << endl; // 奇怪了,i支持常量的概念,值始终不变为10 cout << *pi << endl; // 可*p1值却更改为了20。但他们共用1个内存,却存在2个值 cout << "------" << endl; // 说明这个指针并非保存了2个值 cout << *(pi + 1) << endl; cout << *(pi - 1) << endl; /** * 内存地址中的值的确变为了20.但是由于编译器在读取常量时, * 已经判断这个是常量了,就根本没有再去读内存地址了,而是直接读取的硬编码中的10, * 故即便内存地址改变了,常量也打印的是10! */ return 0; }

 

 

打印:

 

0x22ff54
0x22ff54
10
10
------
0x22ff54
0x22ff54
10
20
------
2293664
2293588

运行成功(总计时间: 219毫秒)

#include <iostream> using namespace std; /** * 类型转换之:常量转换 */ int main(int argc, char** argv) { // volatile易变的,这和const常量本来是2个相互矛盾的关键字,但这样使用却并不会出现错误,volatile const 这样的声明,姑且理解为没有任何声明 volatile const int i = 10; // int *p1 = &i; // 错误,无法这样赋值,或者说转换! int *pi = const_cast<int*> (&i); cout << &i << endl; cout << pi << endl; cout << i << endl; cout << *pi << endl; cout << "------" << endl; *pi = 20; cout << &i << endl; cout << pi << endl; cout << i << endl; // 在使用volatile修饰的常量,也会改变!!! cout << *pi << endl; // 可*p1值却更改为了20。但他们共用1个内存,却存在2个值 cout << "------" << endl; // 说明这个指针并非保存了2个值 cout << *(pi + 1) << endl; cout << *(pi - 1) << endl; return 0; }

 

1
0x22ff54
10
10
------
1
0x22ff54
20
20
------
2293664
2293588

运行成功(总计时间: 360毫秒)

你可能感兴趣的:(File,360,编译器)