《C和指針》讀書筆記

快速而又安全刪除(注釋)代碼
if 0
  statements
endif
轉義字符 \

\ddd ddd代表1~3個數字,表示8進制數值所代表的數字。

#######define與typedef
define的副作用

#define ptr_to_char char*
ptr_to_char a,b //a類型為char*,b類型為char`

而typedef可正確定義

typedef ptr_to_char char*
ptr_to_char a,b a,b類型均為char*
```

######static關鍵字
  用于函數定義或代碼塊之外的變量聲明時,static關鍵字用于修改標識符的鏈接屬性,從external改為internal,但標識符的存儲類型和作用域不受影響。
  用于代碼塊內部的變量聲明時,static關鍵字用于修改變量的存儲類型,從自動變量修改為靜態變量,但變量的鏈接屬性和作用域不受影響。

######位的操縱
把指定位bit_number置1
```
value = value | 1 <<  bit_number;
```
把指定位bit_number置0
```
value = value & ( 1 << bit_number );
```
測試指定位bit_number
```
value & 1 << bit_number;
```

######EOF必須使用int類型的變量接收
  stdio.h中規定EOF=-1,超出了char類型的表示范圍。

######sizeof不對表達式進行求值
```
int a=1,b=10;
sizeof(a = b + 1);
printf("%d",a);
```
輸出結果為1,sizeof(a = b + 1)并沒有向a賦任何值。

######逗號操作符的運用
``` 
a = get_value();
count_value(a);
    while (a > 0) {
        ...
        a = get_value();
        count_value(a);
    }```
利用逗號操作符可以改寫為
```
while (a = get_value(), value_count(a), a > 0) {
        ...
}
```

######左值與右值
  左值代表一個位置(地址),右值代表一個值。

######函數的調用順序
```
f() + g() + h()
```
該段代碼盡管左邊的加法運算必須在右邊的加法運算之前執行,但對于函數調用的順序,并沒有規則加以限制。如果函數執行具有副作用,則可能由于函數調用順序不同而產生不同結果。例如:
```
int fun() {
    static int counter = 1;
    return ++counter;
}
int main() {
    int answer;
    answer = fun() - fun() * fun();
    printf("%d\n", answer);
}
```
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容