#include <stdio.h> int main() { union test{ char a[10]; int b; }u; int *p = (int *)&(u.a[1]); // 没有引起总线错误 *p = 17; printf("%d\n",*p); #if 0 int *q = 0; // 引起段错误,在linux中运行可看到段错误,在windows下运行时直接出错 *q = 1; #endif /* 测试 */ printf("%d\n", sizeof 'A'); // 输出为4(或者你机器上int的长度) // 因为发生了类型提升,char 变 int char c1 = 'a',c2 ='b'; char c3 = c1 + c2; // 溢出,后值为 97+98-256 = -61 printf("%d %d %d\n",c1,c2,c3); return 0; }
程序猿之---C语言细节24(段错误、类型提升、sizeof 'A')
原文地址:http://blog.csdn.net/human_evolution/article/details/41050871