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; }