(我想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刪掉,放置在變數宣告的地方,就是同義動作
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)
沒有留言:
張貼留言
(什麼是留言欄訊息?)