C語言基礎要點

2022-10-10 18:54:08 字數 1685 閱讀 3448

例子(gcc編譯過程):

一些組合語言的操作符

操作符作用

mov移動

add新增

push

壓棧pop

出棧call

呼叫eax 32位暫存器

儲存型別關鍵字(5)

控制語句關鍵字(12)

其他關鍵字(3)

構造型別

指標型別

常量建立的兩種方法

本質上是變數,只不過值是不允許改變的,所以叫常變數

const 資料型別 變數名;
用 const 修飾的變數,無論是全域性變數還是區域性變數,生存週期都是程式執行的整個過程

constvsdefine

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這一類的轉義字元,還...