c語言型別修飾符及記憶體

2022-09-15 18:09:15 字數 1441 閱讀 4497

今天來學習一下c語言型別修飾符及記憶體分布

1、auto int a;

預設在記憶體

2、register int a;

限制變數定義在暫存器上的修飾符

編譯器會盡量安排cpu的暫存器去存放這個a,如果暫存器不足,a還是放在記憶體中

取位址符號&對a不起作用

3、static

應用場景:

1、函式內的變數

2、函式外的變數

3、函式的修飾符(函式也是乙個變數)

int fun() -->  static int fun()

第一、修飾區域性變數的時候,區域性變數不在棧空間,放到全域性的資料段,延長了區域性變數的生命週期,直到程式執行結束以後才釋放。 

第二、static修飾全域性變數的時候,這個全域性變數只能在本檔案中訪問,不能在其它檔案中訪問,即便是extern外部宣告也不可以。 

第三、static修飾乙個函式,則這個函式的只能在本檔案中呼叫,不能被其他檔案呼叫。static修飾的區域性變數存放在全域性資料區的靜態變數區。初始化的時候自動初始化為0; 

4、const

唯讀的變數

const char *p;// p可以變,指向的內容不可變,主要用於字元

char * const p; //p不可以變,指向的內容可以變,主要用於硬體資源(lcd)

雙引號是整型常量,相當於const

char *p="hello world";

*p='a';會報錯,不能對修改常量

5、volatile

告知編譯器編譯方法的關鍵字,不優化編譯

修飾變數的值的修改,不僅僅可以通過軟體,也可以通過其他方式(硬體外部的使用者)

volatile char *p;

while(*p ==0x00);//當按鍵按下後,跳出迴圈

會一直判斷,而不會被系統優化掉,變成死迴圈

記憶體核心空間  應用程式不允許訪問

——————3g

棧空間  區域性變數

執行時的堆空間 malloc

全域性的資料空間(初始化,未初始化)     

唯讀資料段 「hello world」                   靜態空間

**段   code

0x00

堆、棧、制度空間

棧空間區域性變數儲存在棧空間中,當函式執行完後,區域性變數出棧,相當於失效了

生存周期短

堆空間執行時,可以自由,自我管理的分配和釋放的空間,生存週期是由程式設計師來決定

分配  malloc(),返回分配好的位址

char *p;

p=(char *)malloc(5*sizeof(char));

if(p == null){

error

最後必須用free(p);把空間釋放, 防止記憶體洩漏

C 型別修飾符

資料隱藏是物件導向程式設計的乙個重要特點,它防止函式直接訪問類型別的內部成員。類成員的訪問限制是通過在類主體內部對各個區域標記public private protected來指定的。關鍵字 public private protected 稱為訪問說明符。乙個類可以有多個 public prote...

C 修飾符型別

c 允許在char int 和 double資料型別前放置修飾符。修飾符用於改變基本型別的含義,所以它更能滿足各種情境的需求。下面列出了資料型別修飾符 為了理解 c 解釋有符號整數和無符號整數修飾符之間的差別,我們來執行一下下面這個短程式 include using namespace std 這個...

C 修飾符型別

c 允許在char int 和 double資料型別前放置修飾符。修飾符用於改變基本型別的含義,所以它更能滿足各種情境的需求。下面列出了資料型別修飾符 修飾符signed unsigned long 和 short可應用於整型,signed和unsigned可應用於字元型,long可應用於雙精度型。...