数组的大小和指针的大小是什么意思?

时间:2013-06-23 06:11:30

标签: c++ pointers sizeof

最近,我读了代码,并且让人感到困惑

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

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

所以我的问题是:

  1. sizeof(dirs)代表什么?总阵列的大小是什么?

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

5 个答案:

答案 0 :(得分:2)

  1. sizeof(dirs)表示整个数组的大小
  2. sizeof(*dirs)表示数组中单个元素的大小
  3. 因此,sizeof(* dirs)*元素数量= sizeof(dirs),因为元素数量*每个元素的大小=整个数组的大小

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

答案 1 :(得分:2)

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

是的,是的。

what does sizeof(*dirs) represent?

*dirsdirs[0]相同,因此sizeof(*dirs)是第一个元素的大小。 (嗯,每个元素的大小,因为它们是相同的)

sizeof(dirs)/sizeof(*dirs)将是数组中元素的数量。

答案 2 :(得分: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

答案 3 :(得分:0)

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

如果unsized数组是结构的最后一个元素,则sizeof运算符返回没有数组的结构的大小。

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

sizeof array / sizeof array[0]

答案 4 :(得分:0)

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