今天來學習一下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可應用於雙精度型。...