Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 循环在此代码中仅迭代一次,而在另一代码中则正确迭代_C++_Arrays_Loops_Sizeof - Fatal编程技术网

C++ 循环在此代码中仅迭代一次,而在另一代码中则正确迭代

C++ 循环在此代码中仅迭代一次,而在另一代码中则正确迭代,c++,arrays,loops,sizeof,C++,Arrays,Loops,Sizeof,为什么循环在此代码中只运行一次 // Example program #include <iostream> #include <string> using namespace std; int main() { int n=5; int a[n]; for(int i=0;i<sizeof(a);i++) { cout<<"mohit jain"<<e

为什么循环在此代码中只运行一次

 // Example program
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
    int n=5;
    int a[n];
    for(int i=0;i<sizeof(a);i++)
    {
        cout<<"mohit jain"<<endl;
    }
      return 0;
    }
//示例程序
#包括
#包括
使用名称空间std;
int main()
{
int n=5;
int a[n];

对于(int i=0;i考虑使用
const int n=5
。 默认情况下,C++不允许动态大小数组(在这种情况下它是动态的,因为<代码> n< /Cord>是非const)。它只是因为编译器在这种情况下使用某种扩展来分配数组,例如GCC的变量数组。

这样,第一个例子是非标准C++代码,而<>代码> sieOS/<代码>返回1而不是<代码> 5×sieof(int)< /C> >在于编译器的具体实现扩展。


第二个循环运行<代码> 5×sieOf(int)< /C> >倍(大多数系统上20次),而不是5。

VLAS是C++中的非标准。请注意VLA是可选的扩展。它的大小是运行时确定的,所以类型不同。除非你有一个错误的编译器或者做了一些错误的事情,否则它们都应该迭代20次。(假设sizeof(int)=4。请参阅:在这两种情况下尝试打印
sizeof(a)
,然后找出差异(如果有)。它们在任何当前版本的g++上都运行了20次。请更正您的答案并使其更一般,因为它不一定运行20次,这取决于
sizeof(int)
+在OP的情况下,
sizeof
的结果可能是实现定义的,因此即使是
sizeof(a)
实际返回值的5倍,它们也会在Visual Studio v100和v120编译器中运行20次,假设sizeof(int)=4。此外,除非您不将n声明为常量变量,否则该编译器的第一个代码是非法的。我尝试了几个编译器,并能够在这个网站上重现Mohit的问题:@Alexpertenko:看起来像是cpp.sh上使用的g++版本(4.9.2-相当旧)在这方面有一个bug-添加
const
会出于某种原因修复它。当前版本的g++没有这个问题。
// Example program
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a[5];
for(int i=0;i<sizeof(a);i++)
{
    cout<<"mohit jain"<<endl;
}
  return 0;
}