C++ 数组在C+中打印不正确+;
运行此程序时,如果C++ 数组在C+中打印不正确+;,c++,arrays,C++,Arrays,运行此程序时,如果n的值设置为10,它将打印数组a的索引和从a[0]到a[9]的存储值。但是,如果我将n的值设置为大于10,则它仅打印数组a从a[0]到a[5]的索引及其存储值。有人能给我解释一下为什么会这样吗 #include <iostream> using namespace std; int main() { int a[10]; int i, n=11; for(i=0; i<n; i++) { a[i]= 5; }
n
的值设置为10,它将打印数组a
的索引和从a[0]
到a[9]
的存储值。但是,如果我将n
的值设置为大于10,则它仅打印数组a
从a[0]
到a[5]
的索引及其存储值。有人能给我解释一下为什么会这样吗
#include <iostream>
using namespace std;
int main()
{
int a[10];
int i, n=11;
for(i=0; i<n; i++) {
a[i]= 5;
}
cout<<"The array is: \n";
for(i=0; i<n; i++)
{
cout<<"a["<<i<<"] = "<<a[i]<<endl;
}
return 0;
}
#包括
使用名称空间std;
int main()
{
INTA[10];
int i,n=11;
对于(i=0;i如果将n
的值增加到超过数组的大小(或等于从0开始的索引),则将超过数组的结尾。超过数组的结尾是未定义的行为。如果程序显示未定义的行为,则任何情况都可能发生
如果切换到std::array
而不是C数组,并使用.at()
,然后会发生一些定义良好的情况,您将得到一个std::out_of u range
异常。有关更多信息,请参阅和@PaulR,postoed代码是一个完整的示例,在OP使用的任何编译器上都显示了该问题。但是问题从代码中是明确的。因为您使用的是C++14,请查看基于和的范围std::array。后者在访问越界索引时,在调试模式下可能会提供额外的错误处理。@PaulR哦,我明白了,你是pendantic。尽管问题是,当你将n从10更改为大于10的值时,问题会显现出来,并且进行/读取只是一个很小的更改,但你希望发布的代码与t引发了一个问题……给你:@PaulR问题很清楚。代码与N10一起工作。我做了一个编辑,应该让你满意。编辑:知道你可能会挑剔,n=0。@iheani:谢谢你帮助改进问题。我现在也清理了文本,以便让其他人更容易理解。@πάνταῥεῖ 你错了,使用sizeof(a)无法告诉你如果索引超过数组的末尾会发生什么,这实际上是未定义的行为。@iheanyi我说你可以很容易地使用它来检查访问特定索引是否有效。你们都是对的:)只是说了些不同的话!@iheani我不太在乎。吃块饼干吧:你说得对。未定义的行为是未定义的。@πάνταῥεῖ 谢谢,饼干很好吃