主要内容:段错误、类型提升、sizeof 'A'
#include <stdio.h> int main() { union test{ char a[10]; int b; }u; int *p = (int *)&(u.a[1]); // 没有引起总线错误 *p = 17; printf("%d ",*p); #if 0 int *q = 0; // 引起段错误,在linux中执行可看到段错误,在windows下执行时直接出错 *q = 1; #endif /* 測试 */ printf("%d ", sizeof 'A'); // 输出为4(或者你机器上int的长度) // 由于发生了类型提升,char 变 int char c1 = 'a',c2 ='b'; char c3 = c1 + c2; // 溢出。后值为 97+98-256 = -61 printf("%d %d %d ",c1,c2,c3); return 0; }
输出: