1.資料類型:固定記憶體大小的别名,建立變量的模子。
例:char:1byte的别名;short:2byte的别名;int:4byte的别名
2.變量:一段實際聯系存儲空間的别名。程式中通過變量來申請并命名存儲空間。通過變量名可以使用存儲空間。
3.typedef:自定義資料類型。不是創造新的資料類型,隻是給現有的資料類型重新命名。
例:typedef int INT32;//sizeof(INT32)= sizeof(int)=4
typedef unsigned char BYTE;//sizeof(BYTE)=sizeof(unsigned char)=1;
typedef struct _demo
{
short s; //2
BYTE b1; //1
INT32 I; //4
}DEMO;//sizeof(DEMO)=7
4.屬性關鍵字(auto static register)指明變量特有意義。
auto: c語言中局部變量預設屬性,在棧上配置設定空間。
static :變量的靜态屬性,隻被初始化一次
同時具有“作用域限定符”的意義
修飾的局部變量存儲在程式的靜态區
另一意義為檔案作用域标示符
修飾的全局變量/函數作用域隻在聲明檔案中
register: 将變量存儲于CPU寄存器
隻是請求寄存器變量,但不一定請求成功
Register變量必須是CPU寄存器可以接受的值
不能用&運算符求register變量位址
寄存器變量用于講究性能,對實時性要求高的實時系統中
5.if
① bool型變量出現在條件中,不要進行比較
例:bool b=TURE;
If(!b){……}【√】
If(b){……}【√】
If(b == 1){……}【×】
② 普通變量與0/常數比較時,0值/常數應出現在比較符号左邊
例:if( 0 == x) 【可以避免if(0=x)的錯誤】
③ float 型變量不能直接進行0值比較,需要定義精度
例:#defineEPSI 0.000001
Float f= 0.0,f1=5.0;
If((-EPSI<=f)&&(f<=EPSI)){……}//替代if (0==f)
If((5-EPSI<=f1)&&(5+EPSI>=f1))//替代if(5.0==f1)
6.switch
① case 語句中的值隻能是整形或字元型
② case排序 :按字母、數字順序排序
正情況在前、異常情況在後
Default必須有,用于異常情況或預設
③if 可以替代switch , switch無法替代if
7.break:終止循環,用于跳出塊
Continue:終止本次循環,進下次循環,用于跳出循環
Switch不能用continue 關鍵字,因為switch 本身沒有循環
8.do{}while();的妙用:
do
{
if(……) break;
if(……) break;
……
}while(0);
9.goto:應禁用 ,程式品質與goto出現次數成反比
10.void*指針:作為左值用于“接收”任意類型指針
作為右值指派給其他指針需強制類型轉換
例:實作memset的功能
void* my_memset(void* p,char v,int size)
{
void* ret=p;
char dest= (char*)p;
int i =0;
for(i=0;i<size;i++)
{
dest[i]=v;
}
return ret;
}
int main()
{
inta[5]={1,2,3,4,5};
long l=1000;
int i=0;
my_memset(a,0,sizeof(a));//a[5]={0,0,0,0,0}
my_memset(&l,0,sizeof(l));//l=0
return 0;
}
11.extern: 聲明外部定義的變量的函數
用于“告訴”編譯器c的方式編譯
例:extern “C”
{…...}
12.sizeof :編譯器内置訓示符,不是函數
用于計算相應實體所占用記憶體大小
Sizeof的值在編譯器就已經确定
例:int a;
sizeof(a);【√】
sizeof a;【√】
sizeof(int);【√】
sizeof int;【×】
13.const:常變量
修飾的變量是隻讀的,本質還是變量
會占用記憶體空間
可以通過指針來改變值
例:const intc=1;
Int *p = (int*)&c;
*p = 3;
Const 修飾的數值空間不可改變。
14.const 指針
const int*p;/int const*p;//p可變,p指向的内容不可改變
int const*p;//p不可變,p指向的内容可變
const int*const p;//p和p指向的内容不可變
總結:左數右指
當const 出現在*号左邊時指向的資料為常量
當const 出現在*号右邊時指針本身為常量
15.volatile 編譯器警告訓示字
用于告訴編譯器必須每次去記憶體中取變量值
主要修飾可能被多個線程通路的變量
也可修飾可能被未知因素更改的變量
16.柔性數組:大小待定的數組
C語言結構體的最後一個元素可以是大小未知的數組 ,用結構體産生柔性數組
Typedef struct _soft_array
{
Intlen;
Intarray[];
}softArray;
17.struct與union
Struct中的每個域在記憶體中獨立配置設定空間
Union隻配置設定最大空間,所有域共享這個空間
例:struct c union c
{ {
Inta; int a;
Intb; int b;
}//sizeof(c):8byte }//sizeof(c):4byte
18.enum:枚舉
定義常量
預設常量在前一個值基礎上依次加1
變量隻能取定義時的離散值
枚舉與#define差別
①#define宏常量隻是簡單的進行值得替換,枚舉常量是真正意義上的常量
②#define宏常量無法被調試,枚舉常量可以
③#define宏常量無類型資訊,枚舉常量是一種特定類型常量
19.typedef 用于給一個已經存在的資料類型命名
并沒有定義新額類型
Typedef重定義的類型不能進行unsigned和signed擴充
Typedef與#define差別
Typedef是給已有的資料類型取别名
#define為簡單的字元串替換,無别名的概念