C語言總結的知識點
對程式設計的理解:對資料的操作
內容:
資料型別及對應的內容:
運算子:
程式結構:
修飾符:
函式
儲存結構:
記憶體管理:
Gcc編譯:
++++++++++++++++資料型別及對應內容++++++++++++++++
基本資料型別:原子資料型別是最小資料單元:
空型別:是所有資料型別的基礎。
構造資料型別:在基本資料型別的基礎上構造而成的複合資料型別。
==============
基本資料型別
==============
整型變數:
種類:short int ,int , long int
長度: 32位機:2 4 4 64位機:2 4 8
注意:在嵌入式系統中兼顧可移植性和效率:
將int的賦值範圍控制在unsigned int和signed int的交集。
常量:
型別:用0和0x區分八進位制和十六進位制
注意:顯示錶達常量的資料型別
在末尾加L表示長整形常量
在末尾加U表示無符號常量
============
實型=浮點型
浮點型變數:
種類: float ,double ,long double
長度: 4 8 8
有效數字: 6 16 19
浮點型常量:
點分十進位制:預設double型別
指數形式:尾數E指數
============
字元變數:
種類:char
長度:1
注意:儲存字元對應的ASCII碼的值
字元常量:
種類:形如單引號括起來一個字元
注意:特殊的字元常量,轉義字元 \t \n \\ \'
=============
指標
指標常量:
地址常量:陣列名
字串常量:用字串所在記憶體的首地址表示該字串。
字串陣列:
指標變數:
定義:為每個記憶體單元進行編號,利用編號可以準確方便找到對應記憶體。
記憶體單元1位元組,指標4位元組。
注意:
int *p; *是int * 資料型別的一部分
int *p,q; 定義一個指標 p和一個整型變數 q;
*p; *指標解引用符;
二維指標 二維陣列指標 二維指標陣列
int **a: 指標指向的物件是一個一維指標,
int (*a)[3]: 是對應二維陣列a[][3]陣列名a的資料型別;
int *a[3]: 定義一個數組,儲存物件的型別是int *;
野指標:指標變數隨機指向一個記憶體單元;儘量將指標初始化為空
產生原因:
=============
列舉:
=============
空型別:
=============
void *
定義:資料型別不確定的指標變數,變數通過強制資料型別轉換指向任意資料型別。
===============
構造資料型別
===============
陣列:
定義:具有一定關係的若干個變數集合
種類:數值陣列,字元陣列,指標陣列,結構體陣列
格式:資料型別 陣列名 陣列長度
陣列名:地址常量
陣列長度:常量
注意:防止陣列訪問越界;
初始化:
不初始化:
區域性陣列不初始化,元素值不確定。
static陣列不初始化,預設值零
全域性變數不初始化,預設值零
初始化:
全部初始化:定義時初始化。int a[2]={1,2};
部分初始化:初始值比陣列長度小,自動賦零。int a[2]={1};
賦值初始化:定義的時候無陣列長度,int a[]={1,2};
初始化零:
直接賦值為零;int a[2]={0};
字元陣列和字串:
char a[]="asdfg";
陣列長度:字元個數加一,預設新增\0
char *a="asdfg";
字元指標指向一個字串常量;
常用的字串處理函式函式:賦值:strcpy(),比較:strcmp(),求長:strlen()
================
結構體:
特點:①使用者自行構造②由不同基本資料型別構成③定義時不分配空間,定義變數時才分配;
使用:
訪問結構體變數的成員:
結構體變數名.成員名
結構體指標->成員名
=================
結構體和陣列:
當形參分別是結構體和陣列時:分別是值傳遞和地址傳遞;
=======
+++++++++++++++++++++++運算子+++++++++++++++++++++++++++++++++++++
原則:儘量使用括號,閱讀更方便;
優先順序:大略分:四大天王() [] -> .
單目
雙目
例如:*p++和*++p;
*p++;訪問p指向的物件,p後移一位;
*++p;訪問p後移一位所指向的物件;
資料型別轉換:對資料型別進行臨時轉變,並不改變本身型別;
自動:float-》double char short-》int
強制:(型別名)表示式
+++++++++++++++++++++++程式結構+++++++++++++++++++++++++++++++++++++
種類:順序結構,分支結構,迴圈結構
分支結構:if switch
迴圈結構:while for
跳轉語句:
break:跳出迴圈
continue:跳出本次迴圈;