-2

最近,我读了代码,它很困惑

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

而 a will 等于数组的大小,即 6。

所以我的问题是:

  1. sizeof(dirs) 代表什么?是总数组的大小吗?

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

4

5 回答 5

2
  1. sizeof(dirs)表示整个数组的大小
  2. sizeof(*dirs)表示数组单个元素的大小

因此,sizeof(*dirs) * 元素数 = sizeof(dirs),因为元素数 * 每个元素的大小 = 整个数组的大小

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

于 2013-06-23T06:15:15.930 回答
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)将是数组中的元素数。

于 2013-06-23T06:18:08.173 回答
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

于 2013-06-23T06:30:54.910 回答
0

上述答案的一个重要例外是,如果将 dirs 传递给函数,sizeof (*dirs)则仍将是数组中一个元素的大小,但sizeof dirs 现在将评估为环境中指针类型的大小。这是因为传递给函数的数组在函数内部使用时只是一个指针。

于 2013-06-25T22:59:24.500 回答
0

将 sizeof 运算符应用于引用时,结果与将 sizeof 应用于对象本身的结果相同。

如果未调整大小的数组是结构的最后一个元素,则 sizeof 运算符返回不包含数组的结构的大小。

sizeof 运算符通常用于使用以下形式的表达式计算数组中的元素数:

sizeof array / sizeof array[0]
于 2013-06-23T10:21:16.693 回答