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语句的类型:
除了浮点、字符、字符串、结构体、对象以外的任意数据类型