// 字符串, 独立使用多个双引号, 也表示一串字符串 char short_str[] = "hello,"" world""!"; char long_str[] = "this is a very very long string," "so you can set it in multi lines " "by this way"
优先级
# 1. == 和 != 优先级高于位操作符 & | ^ if ((x & MASK) == 0) // (x & MASK) 括号不能省! if ( x & y == 0) // 含义为 x & (y==0)
# 2. 赋值运算符优先级最低 (只比逗号高一级别) if ((c = getchar()) != EOF) // c获得输入值, 然后判断是否是结束符 if (c = getchar() != EOF) // 含义为 c = (getchar() != EOF), 所以c的赋值为 TRUE 或者 FALSE
char *name[] = { "None", "Jan", "Feb", "Mar" }; // 指针数组 name int *daytab[13]; // 指针数组 daytab int (*daytab)[13]; // 数组指针 daytab, 譬如 int a[3][13], 则可以 p=a; p++后就指向了 &a[1][0]
int *f(); // f 函数的返回值为指针类型 int (*pf)(); // 函数指针 pf
// 这两个是极端复杂的例子, 实际代码建议先用 typedef 定义好一层, 然后再嵌套使用, 会容易理解的多! char (*(*x[3])())[5]; // x: array[3] of pointer to function returning pointer to array[5] of char // x,一个指针数组, 这些指针指向函数, 函数的返回值是数组指针... char (*(*x())[])(); // x: function returning pointer to array[] of pointer to function returning char // x,一个函数, 返回值为一个指针. 这个指针指向一个函数指针列表. 函数指针列表指向的函数是返回 char 类型的.
union { int is; struct { unsignedint keyword : 1; unsignedintextern : 1; unsignedintstatic : 1; } flags; } bit_union;
printf 及 scanf
// 打印任意字符串的安全方法 printf(s); // FAILS if s contains % printf("%s", s); // SAFE
// 调用可变参数的方法 voidminprintf(char *fmt, ...) { va_list ap; /* points to each unnamed arg in turn */ va_start(ap, fmt); /* make ap point to 1st unnamed arg */
// do something ... ival = va_arg(ap, int); // do something ...