瀏覽單個文章
SGI
Major Member
 
SGI的大頭照
 

加入日期: Sep 2003
文章: 263
引用:
Originally posted by harrisonlin

1)其實 char* PP[] 並非真的存入"3個字串",而是存入"3個字元指標(就是指字串)",所以PP[0]也是一個指標而已,而不是真的一個字串。用一個指標來代表字串的原因在於,C/C++中並沒有內建"字串"這種資料型態(C++的標準類別庫中有,但仍然不是"內建"資料型態),所以用指向字元的指標來代表一個字串的起始位址,從這個位址起到第一個'\0'為止,視為一個字串。我就延伸你的例子來說明:

char* PP[]={ "Merry Christmas",
"Happy Birthday",
"Happy New Year"
};
int num=(sizeof(PP))/(sizeof(PP[0]));

cout << "sizeof(PP) : " << sizeof(PP) << endl;
cout << "sizeof(PP[0]) : " << sizeof(PP[0]) << endl;
cout << "Element count : " << num << endl;

執行之後,你會發現 sizeof(PP) 是 12, sizeof(PP[0]) 是 4,而元素數量是 3。關鍵在 sizeof(PP[0]) 上,這裡得到"在這個系統中指標所佔的記憶體大小(別忘了,指標也是一種資料型態,也佔記憶體,它所代表的值就是某個記憶體位址)",在windows & linux 上都是 4 個 bytes(我不清楚這是因 OS 還是硬體架構而異),所以這個「指標陣列」一共 12 個 bytes, 所以算下來可以得知有 3 個指標,也就是 3 個字串。


------------------------------------------------------------------
嗯...稍微有點懂,但好像還差那麼一點
請容小弟再發個問
就以相同的例子

1)大大您說 char* PP[] 並非真的存入"3個字串",
那麼是否是存入"3個記憶體儲存位置,然後這3個位置再分別指向
這3個不同字串呢?"

2)PP[0]也是一個指標,那麼它是否指向"Merry Christmas"這個字串?
如果不是,那pp[0]到底是什麼? 那有pp[1],pp[2]這玩意嗎?

3)這陣列佔用了12 byte的"容量",這"容量"可以自己算嗎?

4)指標是記憶體的儲存位置,那麼不管它指向的內容(也許是幾個字母,
數字甚至是冗長的字串)為何,都是佔用4byte嗎?

這些對小弟來說還是蠻不了解的,還望大大多多海涵,能再給小弟我
一些寶貴的意見,感謝您唷
舊 2003-10-15, 10:13 AM #6
回應時引用此文章
SGI離線中