c語言中的儲存型別

2021-10-07 19:11:04 字數 1550 閱讀 1129

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 自動變數 函式中所有...