快速上手c語言,需要知道的一些要點(持續更新,我用的VS2012編的)
地址和指標
指標的一般形式:型別說明 *變數名(*表示該變數是一個指標變數,變數名即為定義的指標變數名,型別說明表示指標變數所指向的變數的資料型別)
指標變數和普通變數一樣,使用前需定義並賦值
& 變數名 如&a表示變數a的地址,及地址運算子
&和*的運算子優先級別相同,按自左向右的方向結合
傳遞指標給函式:
定義函式無非就是對一些數值進行修改,當把函式的引數定義為所需修改的變數型別的指標時,則對指標進行相應的賦值就行,然後呼叫函式時引數改為需修改的變數的儲存值即&變數
要迴圈陣列是也需記得定義一個相應類的指標,通過陣列對指標進行迴圈,陣列不能直接迴圈,因為陣列是常量指標。
C 不支援在呼叫函式時返回區域性變數的地址,除非定義區域性變數為 static 變數。
因為區域性變數是儲存在記憶體的棧區內,當函式呼叫結束後,區域性變數所佔的記憶體地址便被釋放了,因此當其函式執行完畢後,函式內的變數便不再擁有那個記憶體地址,所以不能返回其指標。
除非將其變數定義為 static 變數,static 變數的值存放在記憶體中的靜態資料區,不會隨著函式執行的結束而被清除,故能返回其地址。
產生隨機數的程式碼
函式指標
陣列和指標
當定義一個一維陣列是,系統會在記憶體中為該陣列分配一個儲存控制元件,其陣列的名稱就是陣列在記憶體中的首地址。若定義一個只爭變數,並將陣列的首地址傳給指標變數,則該指標就指向了這個一維陣列
輸入輸出
字串輸入輸出:(需要新增標頭檔案stdio.h)
輸出單個字元:putchar
輸入單個字元:getchar(得到的字元可以賦給一個字元變數或整型變數)
字串輸出:puts(會自動在字串後加\0即自動換行)
字串輸入:gets函式,字元型別(語法格式char *gets(char *str))
格式輸出函式:輸入、輸出函式scanf和printf
printf函式的格式字元:
scanf函式(一般格式scanf(格式控制,地址列表))
迴圈控制
轉移語句:
goto 識別符號;無條件轉移語句,即可令程式立即跳轉到函式內部的任意一條可執行的語句。
break語句,跳出所有迴圈
continue語句,跳出所有迴圈
字串處理函式
字串複製(需先新增標頭檔案string.h):
字串複製,strcpy(目的字元陣列名, 源字元陣列名)
字串連線,strcat(str1, str2),輸出str1
字串比較,strcmp(字元陣列名 1, 字元陣列名2)
字串1等於字串2,返回值0
字串1大於字串2,返回值為正數
字串1小於字串2,返回值為負數
字串大小寫轉換,大寫Strupr(字串)
小寫strlwr(字串)
獲得字串長度:strlen(字元陣列名)
內部函式和外部函式
內部函式:在函式的返回型別前加上關鍵字static,就將原來的函式修飾成內部函式(內部函式只能在所在的原始檔中使用)
外部函式:外部函式是可以被其他原始檔呼叫的函式,定義外部函式使用關鍵字extern進行修飾
標頭檔案的引入
主要:
解決scanf使用問題
宣告#define _CRT_SECURE_NO_WARNINGS
結構體
Stuct 結構體名{
成員列表
}變數名列表;
變數可直接訪問結構體的成員列表
Struct 結構體名{
成員列表
}結構體陣列;
Struct 結構體名{
成員列表
}結構體陣列={初始值列表};
結構體指標
結構體型別 *指標名
(*pStruct).成員名
字串
C typedef
typedef 僅限於為型別定義符號名稱,#define 不僅可以為型別定義別名,也能為數值定義別名,比如您可以定義 1 為 ONE。
typedef 是由編譯器執行解釋的,#define 語句是由預編譯器進行處理的。
前處理器
需要記住得到要點
在變數宣告的時候,如果沒有確切的地址可以賦值,為指標變數賦一個 NULL 值是一個良好的程式設計習慣。賦為 NULL 值的指標被稱為空指標。
區域性變數要定義在方法前面
C語言中用char *string代替string,輸出用string就行
注:多檔案管理的時候,在標頭檔案裡面宣告自定義函式(例a.h)
在C語言檔案裡寫下自定義函式的實現(b.h)
在主函式中呼叫函式(要引入b.h)