新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 《C與指針》讀書筆記七

        《C與指針》讀書筆記七

        作者: 時間:2016-08-17 來源:網(wǎng)絡(luò) 收藏

          在這本書中作者專門討論了數(shù)組的下標和的關(guān)系。而且總結(jié)了一個結(jié)論:“假定兩種方法都是正確的,下標絕對不會比更有效率,但有時會比下標更有效率。”這個問題我以前沒有注意到過。并且作者從編譯結(jié)果的角度證實自己的結(jié)論。

        本文引用地址:http://www.104case.com/article/201608/295622.htm

          int array[10] ,a;

          for( a =0 ;a < 10; a+=1 )

          array[a ] =0;

          這是一個數(shù)組的初始化,將整個數(shù)組初始化為0。array[a ]的定位方法比較特別,按照作者的意思是在計算array[a ]的地址時是arrary的值加上a乘于int的長度值得到的。所以每次數(shù)組元素的訪問都包含一次乘法運算。在基礎(chǔ)數(shù)字電路中我們知道加法器是比較容易實現(xiàn)的,乘法比較不太容易實現(xiàn)。而且乘法運算指令比加法運算指令周期要長。也就是作者認為下標訪問方法效率有提高的空間。

          int array[10] ,*ap;

          for( ap = array ;ap < array + 10; ap++ )

          *ap = 0;

          在for中每次循環(huán)只需將ap自增1即可。徹底拋棄了乘法運算。提高了運算效率。但是如果基礎(chǔ)比較薄弱的程序員應(yīng)該接收不了此種寫法,因為可讀性明顯降低。如果對程序時效和節(jié)能方面沒有特殊的要求,那么我建議還是使用易讀性強的編寫方法。

          在書的146頁作者介紹一系列優(yōu)化方法。作者認為最優(yōu)的復(fù)制兩個數(shù)組的方法如下:

          void try5( )

          {

          register int *p1, *p2;

          for( p1 = x, p2 = y; p1 < &x[SIZE]; )

          *p1++ = *p2++;

          }

          編譯成最終代碼非常簡練。

          在該章節(jié)最后,作者專門介紹這樣做實際意義。

          數(shù)組名作為參數(shù)傳遞函數(shù)時,也就是將數(shù)組的首個元素地址復(fù)制給了函數(shù)的接收參數(shù)。通過該參數(shù)可以對整個數(shù)組進行操作。

          作者再次舉例實現(xiàn)了一個字符串復(fù)制的函數(shù)。

          void strcpy( char *buffer, char const *string )

          {

          while(( *buffer++ = *string)!='

        主站蜘蛛池模板: 孟州市| 迭部县| 临颍县| 定日县| 苏尼特左旗| 江都市| 乾安县| 怀宁县| 襄垣县| 上蔡县| 齐河县| 英吉沙县| 砚山县| 涿州市| 郑州市| 陕西省| 启东市| 隆林| 辛集市| 浙江省| 安陆市| 营山县| 长武县| 阿鲁科尔沁旗| 阜阳市| 新余市| 武汉市| 永吉县| 正镶白旗| 泰和县| 崇礼县| 财经| 普安县| 永川市| 崇义县| 西青区| 湘潭市| 巴青县| 邳州市| 双桥区| 南宫市|