最近我发现了很多例子,其中大部分都是关于 C++ 98,无论如何我已经创建了我的简单数组和一个循环( codepad ):
#include <iostream>
using namespace std;
int main ()
{
string texts[] = {"Apple", "Banana", "Orange"};
for( unsigned int a = 0; a < sizeof(texts); a = a + 1 )
{
cout << "value of a: " << texts[a] << endl;
}
return 0;
}
输出:
价值一:苹果
a的价值:香蕉
a的值:橙色
分段故障
它工作正常,除了最后的分段错误。
我的问题是,这个数组/循环是否做得很好?我正在使用 C++ 11,所以想确保它符合标准并且不能做得更好?
原文由 Lucas 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 C/C++
sizeof
中。总是给出整个对象的字节数,数组被视为一个对象。注意:sizeof
指向数组的第一个元素或单个对象的指针-给出 指针 的大小,而不是指向的对象。无论哪种方式,sizeof
都 没有 给出数组中元素的数量(它的长度)。要获得长度,您需要除以每个元素的大小。例如。,至于以 C++11 的方式来做,最好的方法可能是
这让编译器可以计算出您需要多少次迭代。
正如其他人指出的那样,
std::array
在 C++11 中优于原始数组;但是,其他答案都没有解决为什么sizeof
失败了,所以我仍然认为这是更好的答案。