例子(gcc編譯過程):
一些組合語言的操作符
操作符作用
mov移動
add新增
push
壓棧pop
出棧call
呼叫eax 32位暫存器
儲存型別關鍵字(5)
控制語句關鍵字(12)
其他關鍵字(3)
構造型別
指標型別
常量建立的兩種方法
本質上是變數,只不過值是不允許改變的,所以叫常變數
const 資料型別 變數名;
用 const 修飾的變數,無論是全域性變數還是區域性變數,生存週期都是程式執行的整個過程
const
vsdefine
define是預編譯指令,而const是普通變數的定義
const定義的是變數,而define定義的是常量
因為const定義的物件有資料型別,而巨集定義的物件沒有資料型別。所以編譯器可以對前者進行型別安全檢查,而對後者只是機械地進行字元替換,沒有型別安全檢查。這樣就很容易出問題,即「邊際問題」或者說是「括號問題」
結論:所以程式設計時在使用const和define都可以的情況下盡量使用常變數來取代巨集
補充:const 可以通過指標變相修改【c可以,c++不行】
const int num = 520;
int *p = #
p = 1314;
extern 宣告變數,在變數未賦值前不占用空間
const 定義常變數【儲存值不能修改的變數】
volatile 防止編譯器優化**
register 定義暫存器變數
goto語句原則供參考
不能從一段複雜的執行狀態中的位置goto到另外乙個位置
應該避免像兩個方向跳轉
char str = "hello world"; // 棧區字串
char* ptr = "hello world"; // 資料區常量區字串
// ch[2] = 'm'; // 通過
// p[2] = 'm'; // err
// *(p + 2) = 'm'; // err
變數型別
作用域生命週期
儲存位置
區域性變數
函式內部
到函式結束
棧區全域性變數
專案中所有檔案
到程式銷毀
資料區靜態區域性變數
函式內部
到程式銷毀
資料區靜態全域性變數
定義所在檔案中
到程式銷毀
資料區全域性函式和靜態函式
共享,唯讀
資料區【全域性區靜態區】
棧區【stack】
系統為每乙個程式分配乙個臨時空間
棧區大小為:1m
堆區【heap】
用於動態記憶體分配
高位址 ↓
低位址 ↑
堆空間不允許多次釋放【空指標可以】
開闢所用指標迷失,釋放出錯
typedef struct file;
C語言要點
一關鍵字 1.static 第乙個作用 修飾變數。變數又分為區域性和全域性變數,但它們都存在記憶體的靜態區。由於被static修飾的變數總是存在記憶體的靜態區,所以即使這個函式執行結束,這個靜態變數的值還是不會被銷毀,函式下次使用時仍然能用到這個值。static int j void fun1 vo...
C語言基礎知識要點彙總
最近所在的專案組正在做c的開發,前兩天剛coding完乙個4千來行的程式,4千行的c程式對於經常做c開發的人來說可能不算什麼,但這是我開發過的最長的乙個c程式,做完之後還是小有一點成就感的。大一的時候學了些基礎,之後就沒深入的學習也不怎麼用過c,藉著這次機會想把c複習一下,所以整理了一下可能平時淡忘...
C語言解惑要點
1 運算子的優先順序 2 型別轉換 2.1 有符號與無符號數 結果輸出為 2 2 1 2147483647 1 2147483647 2.2 浮點數與整數 3 控制流 這一部分主要需要注意if else之間的巢狀時的配對情況,及迴圈語句的終止條件與狀態。4 轉義字元 除了 n t這一類的轉義字元,還...