K&R2心得//小筆記

因為K&R2到後面真的是太難了!XDDD
(我想K&R會不會想「我發明充滿美的C語言,因為 C++的影響變成了這種醜醜又難用的樣子」而不開心?)

所以,來寫個小筆記吧!



union
宣告一個記憶體空間,存放不同的type在同一個記憶體空間(一次當作一種type)
時而int,時而char,時而double或long,使用者可以自行自訂
起始位址都是同一個,與structure類似。

structure
宣告一個記憶體空間,存放不同的type在連續記憶體空間
包含任何能宣告的方式(包含自己的指標)
起始位址相鄰,與陣列相類似

陣列
宣告一個記憶體空間,存放相同的type在連續的記憶體空間(一次宣告一種type)
這些type在程式開始時存在,不可以增減(若要增減,則要使用動態記憶體宣告)




typedef
將後面宣告的變數抄寫到相對應的定義字上

//typedef只是定義了type的別名(參考),並不會增加新的資料型態
typedef unsigned char PIXEL[30]
...
//後面這樣宣告變數
PIXEL colorR;
//等同於這樣(把字抄上去)
typedef unsigned char colorR[30];
再將typedef刪掉,放置在變數宣告的地方,就是同義動作
typedef unsigned char colorR[30];

unsigned char colorR[30];


和 #define 的用法很像

#define ABC ORZ
意思是只要出現ABC就把這個字用ORZ替換掉(把字抄下來)

int ABC[30] ;
等於
int ORZ[30];


修飾字

const
 的真正意義是「唯讀」



在此,typedef和const合體加上宣告指標,就成為可怕令人搞混的鬼東西了!
以下有整理一下!請詳讀:


//唯讀指標
int *const icp = &i2;   //常數指標 const pointer
//                     icp = iptr;   //ItP可以改值,不可以改址
               *icp = 3;


typedef string *sp; //指標  Printer


   string s1;

   string s2;
   string *sptr = 0;

   //唯讀指標(指標變唯讀)
   sp const SpCP = &s1;
           *SpCP = "changed";  //OK
//            SpCP = sptr;  //NG 可以改值,不可以改址(ItP)

   //唯讀指標(唯讀的指標)
   const sp CSpP = &s2;
            *CSpP = "changed";  //OK
//             CSpP = sptr;  //NG 可以改值,不可以改址(ItP)





//唯讀存取
const int *cip = &i1;  //pointer to const
//               *cip = 3;    //PtC 不可以改值,可以改址
                       cip = iptr;


typedef const string *csp;  //唯讀存取的指標Pointer to const

//唯讀存取

csp CSP = &s1;
//      *CSP = "changed";  //NG
      CSP = sptr;           //OK 不可以改值,可以改址(ItP)

沒有留言:

張貼留言

(什麼是留言欄訊息?)