【问题标题】:How to use sizeof(a)/sizeof(a[n])如何使用 sizeof(a)/sizeof(a[n])
【发布时间】:2016-04-01 07:24:15
【问题描述】:

为了避免在更改数组大小时悄悄地破坏,我建议std::copy(a, a + sizeof(a)/sizeof(a[0]), b);。更好的是,将 sizeof() 垃圾包装在宏中 - 或者更好的是,使用函数模板代替:template <typename T, size_t N> size_t size((T&)[N]) { return N; } – j_random_hacker 2012 年 9 月 8 日 7:29

当我今天早上查看问答时,我发现了这条评论(有 4 个赞成票)。我对 C++ 很陌生。 a+sizeof(a[0]) 在这里是什么意思,我认为sizeof(a[0]) 会返回 4 代表一个 int 内存字节?非常感谢提前!!。

【问题讨论】:

  • “a+sizeof(a[0]) 在这里是什么意思”也许是一切,因为它没有在这里使用。
  • 你可以在我的answer here找到函数模板解决方案的很好的解释
  • @ShafikYaghmour 谢谢!
  • 请注意,与使用std::copy(std::begin(a), std::end(a), b)相比,您好多更好!除了这个符号实际上很短之外,它还可以防止意外误用 sizeof():如果 a 恰好是使用 std::begin(a)std::end(a) 的指针将导致错误,而使用 sizeof(a) 的版本愉快地编译生成结果错误!
  • @DietmarKühl 哦,非常感谢你!我会记住这一点的!我将尝试使用现代约定和流行的方法(例如使用数组、向量容器和字符串,而不是使用内置数组或字符数组)。那些老式的我会尽量避免使用它们!

标签: c++ size


【解决方案1】:

这很简单:

sizeof(a)/sizeof(a[0])

无论你选择哪个元素(ie n0

【讨论】:

  • sizeof 中的@Des1gnWizard 表达式未计算,您也可以使用*a 代替a[0]
  • 是的,范围内的任何元素(可能只是到n - 1)都会和其他任何元素一样好
  • @PaulEvans 当然:-) 但我认为有区别,当我 cout sizeof(a) 它给我总字节数而 cout sizeof(a[n]) 给我元素数量在数组中正确吗?
  • @PaulEvans 而且这里的循环语句没关系,因为编译器会改变所有适合程序的东西对吧?
  • 不,只有 sizeof(a)/sizeof(a[0]) 会为您提供 any 数组 a 的正确元素数量。只有在sizeof(a[0]) == 1 的情况下大小才正确(char a[N] 的大小等于sizeof(a)
【解决方案2】:

如果a 是一个数组,那么sizeof(a)/sizeof(a[0])a 中元素的数量。它是每个元素大小的整个数组的大小。

所以如果a 是一个数组,那么a + sizeof(a)/sizeof(a[0]) 是一个指向数组末尾之后的指针。

【讨论】:

  • 如果a 是一个指针,那么a + sizeof(a)/sizeof(a[0]) 不是数组末尾之后的指针。仅当 a 是一个数组时才有效。这就是为什么最好使用像std::end(a) 这样的东西,如果你传递一个指针,它实际上会给你一个编译时错误。
猜你喜欢
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 2012-05-29
  • 2021-10-29
相关资源
最近更新 更多