天天看點

c語言筆記1-關鍵字



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為簡單的字元串替換,無别名的概念

繼續閱讀