[NOTE]C程式語言(K&R 第二版)

image image

P52: 宣告只表明變數特性,定義才實際配置記憶體。

P65: 當運算式用&&和||連接時,由左向右運算,一旦式子確定真偽,不論是否巡行完畢,式子都將立即結束。
ex. if ( A && B ) //如果A確定為False,則會直接跳出,不會運算到B。

P67: 外部變數或靜態變數如果未給初值,將自動設定為零。

P78: x *= y + 1 等同 x = x * ( y + 1 )

P109: 若涵式型別沒寫,則自動設定型別為int。 //經過測試,有的編譯器似乎無法通過,可能在之後的標準化中被修正了吧。

P124: 外部變數在宣告的同時也被定義了。(即配置記憶體空間)

P133: char pattern[] = "ould" 是 char pattern[] = { 'o', 'u', 'i', 'd' '\0' } 的簡化寫法。

P154: char s[] 可寫成 char *s

P156: 實作精簡版的malloc和free

P157:  char *a = &alloc[0] 等同 char *a = alloc

P158: NULL定義在<stdio.h>

P158: 若P和Q都指向同一陣列的元素,則關係運算如<和>=等都可正常運作。例如說如果P指向Q之前,則P < Q為真

P159:

int Strlen( char *s )
{
    char *p = s ;

    while ( *p != '\0' )
        p++ ;

    return p - s ;
}

int Strlen( char *s )
{
     char *p = s ;

     while ( *++p ) ;

    return p - s ;
}

P161: char str1[] = "now is the time" ;  // an arrary
         char *str2 = "now is the time" ;  // a pointer

/* str1是個陣列,陣列內的每個字元都可以變動,但str1一定指向這塊儲存陣列的空間;
str2是個指標,初值指向一個字串常數。這個指標可以被修改而指向其他地方,如果企圖去修改字串常數,其結果難以預料。  */

P162:
void Strcpy1 ( char *s, char *t )
{
    int i ;
    i = 0 ;
    while ( ( s[i] = t[i] ) != '\0' )
        i ++ ;
}

void Strcpy2 ( char *s, char *t )
{
    while ( ( *s = *t ) != '\0' ) {
        s ++ ;
        t ++ ;
    }
}

void Strcpy3 ( char *s, char *t )
{
    while ( ( *s++ = *t++ ) != '\0' )
        ;
}

void Strcpy4 ( char *s, char *t )
{
    while ( *s++ = *t++ )
        ;
}

P176: 提供C語言的作業環境裡,有一種方法可以將命令列中的引數或參數傳遞給要執行的程式。當程式執行時,由main進入。main函式可以有兩個引數。第一個(通常寫成argc)是命令列中所提供的引數個數,第二個(argv)是指向含有命令列引數的字串陣列的指標。我們通常應用多層指標(Multiple levels of pointer)在處理這些字串。

P179: printf的格式引數部分也可以是運算式
ex. printf ( ( argc > 1 ) ? "%s " : "%s", *++argv ) ;

P187: int *f () ;    // f: 傳回指向int的指標的函式  function returning pointer to int
        int (*pf) () ; // pf: 指向具有int函式值的函式指標  pointer to function returning int

P240: 如何實作可變長度的引數列的函式。須先引入<stdarg.h>,裡面有規範幾個巨集可用來找出引數指標。(詳細請翻書)
ex. printf( char *fmt, ... )

C的繁複:

P77: return ( x >> ( p+1-n) ) & ~ ( ~0 << n ) ;

P81: for ( i = 0 ; i < n ; i ++ )
           printf ( "%6d%c", a[i], ( i%10 == 9 || i == n-1 ) ? '\n' : ' ' ) ;

P184: 指向函式的指標的範例,整頁程式碼(請翻書)

P188: char ( * ( * x[3] ) () ) [5] ;

No response to “[NOTE]C程式語言(K&R 第二版)” ;

張貼留言