標籤:getc size 位元組 位元運算 區分大小寫 問題: 常見問題 功能 字元數組
目錄結構:
9.1 C語言基礎
9.1.1 資料類型
1 基礎資料型別 (Elementary Data Type)
2 數組、字元數組與字串
3 枚舉類型
4 結構體、共用體和typedef
9.1.2 運算子與運算式
9.1.3 輸入/輸出
9.2 控制語句
1 選擇語句
2 迴圈語句
3 break語句
4 continue語句
5 return語句
9.3 函數
1 函數定義
2 函式宣告
3 函數調用
4 遞迴函式
9.4 指標
9.4.1 指標的定義
1 null 指標
2 “&“和”*“
3 指標與堆記憶體
9.4.2 指標與數組
1 通過指標訪問數組元素
2 通過指標訪問字串常量
3 指標數組
4 指標運算
5 常量指標與指標常量
9.4.3 指標與函數
1 指標作為函數參數
2 指標作為函數傳回值
3 函數指標
9.4.4 指標與鏈表
9.5 常見的C程式錯誤
1 標識符的大小寫有區別
2 忽略變數的類型導致的運算不合法
3 字元常量與字串常量混淆
4 引用未初始化的變數
5 ”=“與”==“
6 少分號或多分號
7 scanf和printf函數的使用問題
8 switch語句中漏寫break
9 資料溢出
10 定長數組和變長數組
11 數組下標的有效範圍
12 混淆數組名與指標變數
13 使用指標的常見問題
進入本文。。。
C語言是一種通用的程式設計語言,目前常用來編寫系統軟體以及進行嵌入式應用開發。
9.1 C語言基礎
用C語言編寫程式涉及資料類型、運算子、運算式、常量和變數、語句、函數定義和函數調用等基本要素。
9.1.1 基礎資料型別 (Elementary Data Type)
C的基礎資料型別 (Elementary Data Type)有字元型(char)、整型(int)、浮點型(float、double)
void類型也是一種基本類型
1)變數:變數本質上指代儲存資料的記憶體單元;變數聲明:可以通過使用extern關鍵字聲明變數名
2)字面量:是指資料在來源程式中直接以值的形式呈現,在程式運行中不能被修改
3)const常量:其所修飾的對象為常量
4)標識符和名字的範圍:在C程式中使用的變數名、函數名、標號以及使用者定義資料類型名等統稱為標識符
2 數組、字元數組與字串
1)數組:略
2)字元數組與字串:字串以特殊字元‘\0‘結尾,多行字串以\作為行結尾
3 枚舉類型
4 結構體、共用體和typedef:typedef用來定義結構體與共用體
9.1.2 運算子與運算式
C語言提供了豐富的運算子,包括算術運算子、關係運算子、邏輯運算子、位元運算符、條件運算子、賦值運算子、逗號運算子及其他運算子。根據運算子需要的運算元個數,可分為單目運算子、雙目運算子和三目運算子。
運算式總是由運算子和運算元組成,它規定了資料對象的運算過程。
1)自增(++)與自減(--)
2)關係運算子(== != < <= > >=)結果的值為1或為0,不能用來比較字串,因為比較的是字串的地址,沒有意義。
3)邏輯運算子(&& || !)運算結果為1或為0
4)賦值運算與組合賦值(=)結合順序為從右至左
5)條件運算子和逗號運算子(? :) (,)
6)位元運算符(~ & | ^ << >>)可與位元運算符組合,產生&= |= ^| <<= >>=
7)sizeof:計算運算式或資料類型的位元組數
8)類型轉換:自動類型轉換,強制轉換
9.1.3 輸入/輸出
C程式中輸入/輸出操作都由輸入/輸出標準庫函數(在標頭檔stdio.h中聲明)完成,常見的有格式化輸出函數printf和格式化輸入函數scanf,以及檔案操作函數fopen,fprintf和fscanf等
1)printf
2)scanf:常用的還有getchar、putchar、gets(gets_s)、puts
9.2 控制語句
語句是程式中的一種基本單位,編程時使用語句描述運算和控制過程。基本的流程式控制制結構有順序、分支(選擇)和迴圈3種,C語言的流程式控制制語句有if、switch、for、while、do-while、break、continue、return等
1 選擇語句 if switch
2 迴圈語句 while do...while for
3 break語句 跳出switch,跳出迴圈
4 continue語句:結束當前這一次的迴圈,執行下一次迴圈
5 return語句:函數傳回值
9.3 函數
函數是一個功能模組,用來完成特定的任務。有兩種函數,一種是已經定義並隨著編譯系統發布的、可供使用者調用的標準函數,也稱為庫函數,如printf、scanf等,另一種是使用者根據需要自己定義的
1 函數定義:包括函數名、參數列表、傳回型別和函數體
2 函式宣告:傳回型別 函數名(參數列表)
3 函數調用:函數名(實參表)
4 遞迴函式
9.4 指標
簡單來說,指標是記憶體單元的地址,它可能是變數的地址、數組的地址,或者是函數的入口地址,儲存地址的變數稱為指標變數,簡稱為指標。指標是C語言中最有力的武器,能夠為程式員提供極大的編程靈活性。
9.4.1 指標的定義:指標對象,指標指向的對象
1 null 指標 NULL,全域指標變數會被自動初始化為NULL,局部指標變數的初值則是隨機的。
2 “&”和“*” 地址運算子,間接運算子
3 指標與堆記憶體:malloc,calloc,realloc進行記憶體配置,free函數釋入記憶體,sizeof,記憶體流失
9.4.2 指標與數組
1 通過指標訪問數組元素:數組名就是數組在記憶體中的首地址,ptr++指向下一個元素,int a[m][n] a[i][j]地址 a+(i x n) + j * sizeof(int) 即(&a[0][0] + i x n + j)
2 通過指標訪問字串常量:可以把str當成數組來訪問
3 指標數組:數組的元素為指標 int **arr2
4 指標運算:指標變數加或減一個整數,移動的距離與變數所佔用的儲存空間的大小有關
5 常量指標與指標變數:常量指標是指指標指向的對象是常量,即指標變數可以修改,但是不能通過指標來修改其指向的對象:const int *p = &d;指標常量是指標本身是個常量,不能再指向其他對象:int *const p = &d;區分常量指標和指標常量的關鍵是“*”的位置,如果const在“*”的左邊,則為常量指標,如果const在“*”的右邊則為指標常量
9.4.3 指標與函數
指標可以作為函數的參數或傳回值
1 指標作為函數的參數:用指標作為函數的參數要以在進行函數調用時,通過指標來改變調用函數中實參變數的值
2 指標作為函數傳回值:資料類型 * 函數名(參數列表)
3 函數指標:可以將函數地址儲存在函數指標變數中,然後用該指標間接調用函數 int (*Compare)(const char*, const char*) Compare=&strcmp 也可以在定義的時候初始化
下面3個調用是等價的:
strcmp("Tom", “Tim");
(*Compare)("Tom", "Tim");
(Compare)("Tom", "Tim");
9.4.4 指標與鏈表(略)
9.5 常見的C程式錯誤
1 標識符的大小寫有區別:C語言預設區分大小寫
2 忽略變數的類型導致的運算不合法:如浮點數取餘
3 字元常量與字串常量混淆:‘‘ ""不分
4 引用未初始化的變數:未初始化的變數的值是隨機的,使用這些資料會造成不可預料的後果
5 ”=“與”==“ 賦值與相等判斷不分
6 少分號或多分號
7 scanf和printf函數的使用問題:scanf函數少&,
8 switch語句中漏寫break
9 資料溢出
10 定長數組和變長數組:變長數組可採用動態申請記憶體的方法並用指標儲存記憶體空間的地址:ptr = (int*)malloc(n*sizeof(int))
11 數組下標的有效範圍:數組越界
12 混淆數組名與指標變數:數組名是常量,不能修改
13 使用指標的常見問題 :記憶體流失,null 指標,野指標:野指標是指那些已經釋放掉的記憶體指標,因此,釋放記憶體後立即把對應指標置為空白值,返回指向臨時變數的指標:函數中的參數和非靜態局部變數在棧中分配儲存空間,是臨時的,不能把指向這些臨時變數的指標返回給調用者,否則會產生不可預料的後果。
程式員教程-9章-C程式設計