2013-06-23 79 views
-2

最近,我讀了代碼的打擊,這讓迷茫數組的大小和指針的大小是什麼意思?

static string const dirs[6] = {"-n", "-ne", "-se", "-s", "-sw", "-nw" }; 
int a = sizeof(dirs)/sizeof(*dirs); 

而且遺囑等於陣列,這是6

的尺寸所以我的問題是:

  1. sizeof(dirs)代表什麼?總陣列的大小是多少?

  2. sizeof(* dirs)代表什麼?

+0

至少第二個,[數組](http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c)。 – chris

+3

你最喜歡的C++書籍中關於sizeof是什麼以及sizeof是幹什麼的? – AnT

+2

如果你堅持用C++編寫數組,那麼這樣做的首選方式通常是這樣的:'template size_t arraylen(T(&)[N]){return N; }' –

回答

2
  1. sizeof(dirs)表示整個陣列
  2. sizeof(*dirs)的大小代表了陣列的單個元件的尺寸

因此,的sizeof(*顯示目錄)*元素的數目=的sizeof (dirs),因爲元素的數量*每個元素的大小=整個陣列的大小

因此,元素的數量= sizeof(dirs)/ sizeof(* dirs)。

+1

「'sizeof(* dirs)'代表陣列單個元素的大小「 - 更確切地說,是第一個元素的大小。 – 2013-06-23 06:28:17

2
what does sizeof(dirs) represent? Is the size of the total array? 

是的。

what does sizeof(*dirs) represent? 

*dirs是相同與dirs[0],所以sizeof(*dirs)是第一要素的大小。 (以及每個元素的大小,因爲它們是相同的)

sizeof(dirs)/sizeof(*dirs)將是數組中元素的數量。

0

sizeof運算符產生提供的操作數的字節大小。 由於*dir等於dir[0],因此sizeof(*dirs)將以字節返回第一個數組元素的大小,否則sizeof(dirs)將返回所有數組的字節大小。因此,當你分割這些數字時,你會得到數組中的元素數量。

更多關於sizeof操作者:http://en.wikipedia.org/wiki/Sizeof http://en.cppreference.com/w/cpp/language/sizeofhttp://msdn.microsoft.com/en-us/library/4s7x1k91(v=vs.110).aspx

0

當sizeof運算符應用於參考,彷彿的sizeof已經應用到對象本身的結果是相同的。

如果未經處理的數組是結構的最後一個元素,那麼sizeof運算符將返回沒有數組的結構的大小。

sizeof運算符常常用於計算使用所述形式的表達的數組中的元素的數量:在上述回答

sizeof array/sizeof array[0] 
0

一個重要的例外是,如果顯示目錄被傳遞到功能可按, sizeof (*dirs)仍然是數組中一個元素的大小,但sizeof dirs現在將評估爲您環境中指針類型的大小。這是因爲傳入函數的數組在函數內部使用時只是一個指針。