以前不知道的东东,记下来。 改变const的值 /*改变const变量的值*/ void change_const() { const int a = -1; int *b = &a; *b = 2222; printf("%d/n",a); } //结果:2222 /*C语言:检测char和'a'所占内存的大小*/ void charsize() { printf("sizeof(char)=%d,sizeof('a')=%d/n",sizeof(char),sizeof('a')); } //结果:sizeof(char)=1,sizeof('a')=4 /*C++语言:改变const变量的值*/ void charsize() { cout<<"sizeof(char)="<<sizeof(char)<<","<<"sizeof('a')="<<sizeof('a')<<endl; } //结果:sizeof(char)=1,sizeof('a')=1 /*使用无符号数的BUG*/ void use_unsign() { int d = -1, x; int arr[]={1,2,3,4,5,6,7}; #define T (sizeof(arr)/sizeof(arr[0]))//sizeof()返回的size_t是无符号整数 if(d <= T-2)//有符号数与无符号数比较,有符号数提升为无符号数,d是超大正数 { x = arr[d+1]; printf("%x/n",x); } else { printf("Direct End/n"); } } C&&C++ case语句的fall through缺陷: void test(int n) { n = 2; switch(n) { int i;//can't execute //int j = 1;//invalid n++;//can't execute case 1: cout<<"case 1"<<endl; case 2: cout<<"case 2"<<endl; case 3: cout<<"case 3"<<endl; default: cout<<"default"<<endl; } } /***result****C&&C++:case fall through,必须显示的使用break; case 2 case 3 default *************/