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

The loop iterates only once in this code while in another code it iterates properly

本文关键字:迭代 代码 另一个 一次 循环      更新时间:2023-10-16

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

 // 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;
    }

在代码中循环迭代五次?

// 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;
}

因此,请告诉我为什么它在第一个代码中迭代一次,而在第二个代码中迭代五次的正确原因。

考虑改用const int n = 5。默认情况下,C++不允许动态大小数组(在这种情况下它是动态的,因为n是非常量数组(。它之所以有效,只是因为在这种情况下,编译器使用某种扩展来分配数组,例如 gcc 的变量数组。

因此,第一个示例是非标准C++代码,sizeof返回 1 而不是 5 * sizeof(int) 的原因在于特定于编译器的扩展实现。

顺便说一句,第二个循环运行 5 * sizeof(int) 次(大多数系统上为 20 次(,而不是 5 次。