请问在这个约瑟夫问题中,把数组定义在main()函数前与下面程序中定义的数组方式
有什么异同?
为什么在VC6.0中认为示例程序的数组错误,而在dev C++中却没事
#include <iostream>
#include <iomanip> //调用setw()函数
using namespace std;
//bool str[101];
int main()
{
int n, m;
cin >> n >> m; //n为人数, m为报数数字
bool str[n+1];
cout << endl;
for(int i=1;i<=101;++i)
{
str[i] = false; //相当于memset(str, 0, sizeof(str))
}
int a = 1, s = 1, f=1;
do
{
++a;
if(a==n+1) //模拟环状
a=1;
if(str[a]==false)
++f;
if(f==m)
{
f = 0; //计数器清零
++s;
str[a] = true;
cout << a << setw(5) << endl; //输出并设置域宽
}
}while(s!=n);
return 0;
}
在函数(main或者其他函数)外部定义的数组都是全局数组,但是只有在定义以后的函数中才能访问。
在函数中定义的是局部数组,也是仅在函数中定义以后的代码块中才能访问。
bool str[n+1]的确是不合法的。数组定义时,长度必须时常量。如果需要跟具n来确定数组的大小,需要用到动态分配内存的malloc或者new,当然申请的资源最后需要调用free或者delete[]释放。
在main函数前定义的是全局数组,一般在静态存储区。
在main函数中定义的是局部数组,一般在堆中。
bool str[n+1]在标准c++中是不合法的,数组长度不能是变量。
但有的编译器认为合法。
c里面数组的定义数组长度不能放变量
1l,说的有错,在main函数中定义的是局部数组,一般在栈中。
全局数组与局部数组生存期也不同(区别很多,这里我只说这一个)。全局数组你可以在任何地方用,局部的就只能在此函数内部用。