天天看點

2013-7-11學習筆記

宏定義參數沒有類型判斷,宏定義在編譯的時候就已經計算好了,是以效率比一般函數要高。

#define mul(a,b) ((a)*(b))  

預處理指令

條件判斷預處理指令,如果條件成立則預編譯

#if 條件1

..code1..

#else if 條件2

..code2..

#define NUM 10

#if NUM > 0

    printf("NUM>0");

#elif NUM==0

    printf("NUM=0");

#else

    printf("NUM<0");

#endif

    return0;

如果定義了某個宏,就預處理

#define MAX 10

#ifdef MAX

     ..code..

#ifndef MAX

在建立一個頭檔案的時候都寫上,重新建立一個.h檔案都會自動生成這麼一段的

#ifndef include_Header_h

#define include_Header_h

#end if

這樣才能放心的在main函數中引用這些頭檔案而不擔心重複引用

局部變量和全局變量

void test()

{

    //全局變量和靜态變量

    //靜态變量static修飾的也是全局變量

    //b是一個局部變量,自動變量

    int b=0;

    b++;

    //C是一個局部變量,靜态變量

    staticint c= 0;

    c++;    

    printf("b=%d,c=%d\n",b,c);

}

運作結果:

b=1,c=1;

b=1,c=2;

b=1,c=3;

解釋:因為b變量是局部變量,生命周期随着函數的銷毀而銷毀,是以在每次調用test函數的時候,b變量都被重新建立,重新指派為0,是以每次列印出來都是1;而c變量是static變量,它被建立以後生命周期是随着程式的結束而結束的,是以在第二次調用這個函數的時候,就不需要建立c變量了,隻要在原來的基礎上繼續添加就行了!static變量并不是在編譯的時候建立的,還是在運作的過程中建立的,雖然生命周期改變,但是作用範圍是不變的。

寄存器變量(register)本身也是自動變量,當函數結束時候,寄存器變量消失,當寄存器不夠用的時候,會自動變成自動變量

//一開始定義的p是指向一個靜态區域,不可以改變*p了

    char *p="ABC";

    printf("%c",*p);

    *p="d";

    printf("%c",*p);

void func(int *a)跟void func(int a[100])是一樣的效果

int k=sizeof(a);這裡k是一個指針的大小結果:k=8;

函數的形參本身就 開辟了空間 大小跟形參沒有關系,好比void func(int a[10000000])随便形參數組有多大,都是一個指針的大小,如果要再func函數中計算main函數中傳過來的數組空間的大小,那隻能是char形式的,用strlen(p)來計算(char *p)

//

int main(int argc, constchar * argv[])

    int a[]={2,3,4,5,6,7};

    int *p=&a[0];

    printf("%d ",*p);

    p=&a+1;

    printf("%d ",*(p-1));

    p=&a;

    printf("%d ",sizeof(&a));

    printf("%d ",sizeof(&a+1));

    p=(int *)(&a+1);

    return0;

結果:2 7 2 8 8 7   這裡&數組名 是指數組的整個大小

const 是常量

遞歸求N!

本文轉蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366447,如需轉載請自行聯系原作者