2013-06-23 138 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现在将评估为您环境中指针类型的大小。这是因为传入函数的数组在函数内部使用时只是一个指针。