auto:(自動型別)
在定義變數的時候,變數前預設就是auto
auto int a; 等於 int a
非自動型別的變數:
1.全域性變數
2.static修飾的變數
register:暫存器型別的變數
register int a;
暫存器型別的變數,要不普通的變數執行效率要高。
在乙個soc(system on chip)上暫存器的個數是有限
在(a53:40)
static:
static 修飾的變數如果沒有初始化預設為0;
static int a;
printf("a = %d\n",a); //結果是0
作用:1.延長變數的生命週期
void static_fun()
static_fun(); //2
static_fun(); //3
2.限制作用域
static修飾的函式或者變數只能在本檔案
中使用。
const:(唯讀變數)
const int a=10;
a = 100; //錯誤
int a = 10;
int b = 1000;
const int *p = &a;
*p = 100; 錯誤的
p = &b; 正確的
表示p執行的內容不能修改,但是p是可以修改的。
int a = 10;
int b = 1000;
int const *p = &a;
*p = 100; 錯誤的
p = &b; 正確的
表示p執行的內容不能修改,但是p是可以修改的。
int a = 10;
int b = 1000;
int * const p = &a;
*p = 100; 正確的
p = &b; 錯誤的
*p可以修改,p不允許修改
const int * const p = &a;
代表*p和p都是唯讀的。
extern:
extern int a;
extern int add(int a,int b);
a或add函式定義沒有在當前的.c中,它是
在另外乙個.c中定義的。
volatile:(容易改變的)
volatile int *p =
(volatile int *)0x8000000; (位址中儲存的是10)
*p 取出位址中的值10;
//(硬體將0x8000000位址中的值改為了100);
//由於位址中的資料不是別這個程式修改的,
//所以下面這個式子在運算的時候,還是拿的之前的
//資料
y = *p + 1; //不加volatile是11
//如果加volatile就是101
總結:防止編譯器對變數優化,每次在使用這個變數
的值的時候,都需要重新從記憶體上取值。
C語言中變數的儲存型別
變數的儲存型別 storage class 是指儲存變數值的記憶體型別。有三個地方可以用於儲存變數 普通記憶體 執行時堆疊 硬體暫存器 用於宣告變數儲存型別的關鍵字 auto static register 在所有 塊之外的變數的預設儲存型別是靜態的 static 儲存於靜態記憶體中,稱為靜態 st...
小議C語言中資料的儲存型別
華清遠見嵌入式學院 講師。c語言中的一些說明和定義會用到儲存型別這樣乙個概念,在c語言中儲存型別會用到下述幾個關鍵字 auto,static,register,extern。看下面的簡略圖大家可以明確程式在進行儲存時是分為三個區域的,分別為 段,資料段和bss段,用於儲存不同型別和狀態的變數,而執行...
C語言中的四種儲存型別
一 首先來說說資料的型別,所有的資料都有兩種型別,一是常見的資料型別,如int,float等,一種便是今天的重頭戲,儲存型別。總共有四種儲存型別的變數,分別為自動變數 auto 靜態變數 static 外部變數 extern 以及暫存器變數 register 先回顧一下定義 1 自動變數 函式中所有...