1、printf函数的参数从右向左运算
char s[] = "123", *p; p = s; printf("%c%c%c\n", *p++, *p++, *p++);
结果:321
分析:*p++运算,先计算*p,然后再使p得值加1;
本题先输出最后一个*p,是1,然后p+1,指向了字符串中第二个数2;
以此类推。
2、 x = x&(x-1):每运算一次,就导致二进制x中的1减少一个。
int miracle(unsigned int n) { int m= n==0 ? 0:1; while (n=(n&(n-1))) { m++; } return m; }
这段代码的作用:统计1的个数。
3、fork执行一次,返回两个值。父进程返回子进程号,子进程返回0。
|| 与运算:A||B,如果A为真,则B就不执行;A为假,则B才会执行。
int main() { fork()||fork(); }
共产生3个进程。
分析: fork()主
fork()主 fork()子1
fork()子1 fork()子2
所以,一共产生3个进程。
4、continue:跳出本次循环。break:跳出循环。
#include int main() { int a, b; for (a = 1, b = 1; a <= 100; a++) { if (b >= 20) break; if (b % 3 == 1) { b += 3; continue; } b -= 5; } printf("%d\n", a); return 0; }
程序结果:8.
5、函数的递归调用:相当于栈,先进后出
main(){ char str[]="Geneius"; print (str); } print(char *s){ if(*s){ print(++s); printf("%c",*s); } }
结果是:suiene
6、大小端
小端:低位存在低地址。pc机
大端:低位存在高地址。网络字节
union X { int x; char y[4]; };
如果
X a;
a.x=0x11223344;//16进制
则y[3]=11;
7、可用于switch语句的类型:
除了浮点、字符、字符串、结构体、对象以外的任意数据类型