1、printf函數的參數從右向左運算
char s[] = 123, *p; p = s; printf(%c%c%c , *p++, *p++, *p++);
結果:321
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
, a);
return 0;
}
程序結果:8.
5、函數的遞歸調用:相當於棧,先進後出
main(){
char str[]=Geneius;
print (str);
}
print(char *s){
if(*s){
print(++s);
printf(%c,*s);
}
}
結果是:suiene
6、堆與棧、靜態數據區
#include結果:空。buffer存在棧中,隨著函數的的結束而消失。應該使用new。char *myString() { char buffer[6] = {0}; char *s = Hello World!; for (int i = 0; i < sizeof(buffer) - 1; i++) { buffer[i] = *(s + i); } return buffer; } int main(int argc, char **argv) { printf(%s , myString()); return 0; }
int main()
{
char *p = hello,world;
return 0;
}