請問在這個約瑟夫問題中,把數組定義在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[]釋放。