C 語(yǔ)言實(shí)用技巧

1. float x 等于0: if((x<0.000001)&&(x>-0.000001))

  • 一般float型只能精確到小數(shù)到后六位即1e-6,將float型的數(shù)x的絕對(duì)值abs(x)與1e-6比較,如果abs(x)比1e-6還要小的話就可以認(rèn)為x的值為零,因?yàn)樾?shù)六位以后是不精確的,是沒(méi)有意義的。
    比如數(shù)0.0000001雖然確實(shí)不等于零,但是第七位小數(shù)1是沒(méi)有意義的就可以認(rèn)為這個(gè)數(shù)等于0。
  • float,double分別遵循R32-24,R64-53的標(biāo)準(zhǔn)。所以float的精度誤差在1e-6;double精度誤差在1e-15 。所以要判斷一個(gè)單精度浮點(diǎn)數(shù)是否為0:則是if( abs(f) < 1e-6);要判斷一個(gè)雙精度浮點(diǎn)數(shù)是否為0:則是if( abs(d) < 1e-15 );

2. 宏定義

#define MAX(a,b)  (((a)>(b))?(a):(b))
#define MIN(a,b)  (((a)<(b))?(a):(b))
#define DOUBLE(x) ((x)+(x))

3. 用printf函數(shù)顯示調(diào)試信息

//#define __DEBUG_MSG
#ifdef __DEBUG_MSG
#define DEBUG_MSG printf
#else
#define DEBUG_MSG()
#endif

4. x%(2^n) = x-((x>>n)<<n)

5. 在C/C++里數(shù)組str作為參數(shù)時(shí)傳遞的實(shí)際上是指向數(shù)組第一個(gè)元素的指針。因此sizeof(str)返回的是指針的大小,即4。

  • 以下形式的參數(shù)是完全等價(jià)的:
    void Func(char str[100]);
    void Func(char str[]);
    void Func(char *str);
    void Func(char *(str+100));
    

6.指針p+n 指向(p的地址+n*sizeof(p的數(shù)據(jù)類型))

7.指針、數(shù)組與函數(shù)

int a ;              一個(gè)整形數(shù)
int *p;              一個(gè)指向整形數(shù)的指針
int **p;             一個(gè)指向指針的指針,它指向的指針指向一個(gè)整形數(shù)
int a[10];           一個(gè)有10個(gè)整形數(shù)元素的數(shù)組
int *a[10];          一個(gè)有十個(gè)指針元素的數(shù)組(指針數(shù)組),每個(gè)元素都指向一個(gè)整形數(shù)
int (*p)[10];        一個(gè)指針(數(shù)組指針),指向一個(gè)有十個(gè)整形數(shù)元素的數(shù)組
int *f(int);         一個(gè)函數(shù)(指針函數(shù)),返回值是一個(gè)地址(指針)
int (*p)(int);       一個(gè)指針(函數(shù)指針),指向一個(gè)返回整形數(shù)值的函數(shù)
int (*a[10])(int);   一個(gè)有十個(gè)指針(函數(shù)指針)元素的數(shù)組,每個(gè)元素都指向一個(gè)函數(shù)

8. 絕對(duì)地址的操作

  • 向絕對(duì)地址0x100000 寫(xiě)值

    *(unsigned int*)0x100000 = 0x1234;
    
  • 程序跳轉(zhuǎn)到絕對(duì)地址0x100000去執(zhí)行

     void (*main)(void);
     main = (void*)0x100000;
     main();
     or
    *((void *)0x100000) ();
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容