程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C/C++編程細節、技巧

C/C++編程細節、技巧

編輯:關於C++

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
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;
}
結果:空。buffer存在棧中,隨著函數的的結束而消失。應該使用new。

 

 

 

int main()
{
    char *p = hello,world;
    return 0;
}

p是局部變量,存在棧中;hello,world存在靜態數據區

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved