第12课 - 经典问题解析一

it2026-08-11  11

 

 

 

 

 

 

 

 

 

#include <stdio.h> int main() { const int x = 1; const int& rx = x; int& nrx = const_cast<int&>(rx); nrx = 5; printf("x = %d\n", x);//x是常量被放入到符号表 printf("rx = %d\n", rx); printf("nrx = %d\n", nrx); printf("&x = %p\n", &x); printf("&rx = %p\n", &rx); printf("&nrx = %p\n", &nrx); volatile const int y = 2; int* p = const_cast<int*>(&y); *p = 6; printf("y = %d\n", y); printf("p = %p\n", p); const int z = y; p = const_cast<int*>(&z); *p = 7; printf("z = %d\n", z); printf("p = %p\n", p); char c = 'c'; char& rc = c; const int& trc = c;//类型不同得到新的只读变量 rc = 'a'; printf("c = %c\n", c); printf("rc = %c\n", rc); printf("trc = %c\n", trc); return 0; } 输出结果: x = 1 rx = 5 nrx = 5 &x = 0x7fffd65d2dd0 &rx = 0x7fffd65d2dd0 &nrx = 0x7fffd65d2dd0 y = 6 p = 0x7fffd65d2dd4 z = 7 p = 0x7fffd65d2dd8 c = a rc = a trc = c C++还为const 分配内存空间,只有通过引用和指针才能使用 #include <stdio.h> int a = 1; struct SV { int& x; int& y; int& z; }; int main() { int b = 2; int* pc = new int(3); SV sv = {a, b, *pc}; int& array[] = {a, b, *pc}; //Error &array[1] - &array[0] = ? Expected ==> 4 //C 语言的地址是顺序排放的,C++兼容这个规则 //C++ 不支持引用数组 printf("&sv.x = %p\n", &sv.x); printf("&sv.y = %p\n", &sv.y); printf("&sv.z = %p\n", &sv.z); delete pc; return 0; }

 

最新回复(0)