[C語言學習筆記四]變量與系統的交互

使用 const 建立常量和使用 volatie 優化變量

C語言中使用 const 定義常量。編程

例如:編輯器

const INT a = 10;

此處若是添加a = 20;,編輯器則會報錯,由於此處 a 是隻讀的。
在編譯過程當中,由 const 定義的常量使用字符表存儲,而不佔用內存,提升了程序的效率。優化

注意:爲了區別變量和常量,編程時經常使用大寫字母來置頂常量的名稱來提升可讀性。code

使用 volatile 定義一個經常須要更改的變量。使用 volatile 定義的變量會在編譯器優化時更新,而不是讀取在寄存器中的副本。內存

例如:編譯器

int data = 1,a,b;
a = data;
...
b=data;

a 在請求變量 data 時,data 的值被寫到了寄存器中。但此時 data 是一個快速更新的值,在程序沒有預料到的時候更改成新的值;而 b 請求 data 的值時,由於寄存器中有現成的 data 值,因此程序會直接將寄存器中過期的 data 值給 b ,所以程序可能出現錯誤。it

volatile data a = 1;
int a,b;
a = data;
...
b = data;

但當使用 volatile 變量時,程序會從新讀取 data 的值給 b ,因此能避免此類錯誤。編譯

使用簡短的數據類型名

有時候會遇到長數據類型名,例如 long long int ,不方便引用。此時可以使用 typedef 來爲 long long int 指定新數據類型名。
例如:class

typedef int it;
it data1 =1;  /* 使用名稱定義爲 it 的 int 型數據類型 */
it data2 =2;

2020年2月20日補充效率

使用 sizeof 取得數據大小

使用 sizeof() 能夠取得括號內最終數值所佔的字節數。

注意:sizeof 不能用於取出數字的位數

例如:

int data = 10
int main(void) {
    printf("%d\n",sizeof(data));   /* 輸出內容爲 4 */
    return 0;
}

有符號數和無符號數

C語言對變量提供了兩個類型。其中一個爲 signed ,即有符號數;而另外一個爲 unsigned ,即無符號數。 signed 型能夠用來表示任何數,而 unsigned 型只能用來表示非負數。
其中, signed 型數在內存中的首位用於表示正負,能夠爲 0 或 1 。unsigned 型則是直接表示。因爲這種緣由,產生了「安卓手機時間只能調到 2038 年」的說法。由於 C 語言的時間使用 signed 型表示,到達這個時間,除第一位外,其餘數位均爲 9 ,所以便會迫使進 1 ,所以引起錯誤使時間會變爲負。
例如:

signed int data = -1 /* 也能夠是 1 */
unsigned int data = 1 /* 只能爲 1 ,只能爲非負數 */
相關文章
相關標籤/搜索