将整数传递给函数内的数组(无指针)
Passing integers to arrays within functions (without pointers)
我正在尝试创建一个幻方,它将打印四种不同的网格尺寸(5x5、7x7、9x9、15x15)。我遇到的错误是函数中的数组 magsquare 告诉我它需要一个常量整数。 (我不能使用指针)这是一个 class 作业。
#include <iostream>
#include <iomanip>
using namespace std;
void magicSquare(int n){
int magsquare[n][n] = { 0 }; /*THIS is the error with [n][n]*/
int gridsize = n * n;
int row = 0;
int col = n / 2;
for (int i = 1; i <= gridsize; ++i)
{
magsquare[row][col] = i;
row--;
col++;
if (i%n == 0)
{
row += 2;
--col;
}
else
{
if (col == n)
col -= n;
else if (row < 0)
row += n;
}
}
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
cout << setw(3) << right << magsquare[i][j];
}
cout << endl;
}
}
int main(){
int n = 5;
magicSquare(n);
return 0;
}
缩进可能看起来不正确,但它是正确的。对不起。
失败是因为标准 C++ 无法像您尝试的那样在堆栈上分配动态大小的数组。
int magsquare[n][n];
就 magicSquare
而言,n
仅在运行时已知,对于要在堆栈上分配的数组,其大小必须在编译时已知。
使用 15 x 15 阵列。
int magsquare[15][15];
只要你知道这是你需要的最大的,你应该没问题。
备选方案(您已经说过不能使用)
- 使用
new
声明所需维度的二维数组。 (不过记得删除[])
- 使用
std::vector
添加检查以拒绝 n 个大于 15 或小于 1 的值也是个好主意,否则如果将 1-15 以外的任何值传递给函数,您将面临未定义的行为。
我正在尝试创建一个幻方,它将打印四种不同的网格尺寸(5x5、7x7、9x9、15x15)。我遇到的错误是函数中的数组 magsquare 告诉我它需要一个常量整数。 (我不能使用指针)这是一个 class 作业。
#include <iostream>
#include <iomanip>
using namespace std;
void magicSquare(int n){
int magsquare[n][n] = { 0 }; /*THIS is the error with [n][n]*/
int gridsize = n * n;
int row = 0;
int col = n / 2;
for (int i = 1; i <= gridsize; ++i)
{
magsquare[row][col] = i;
row--;
col++;
if (i%n == 0)
{
row += 2;
--col;
}
else
{
if (col == n)
col -= n;
else if (row < 0)
row += n;
}
}
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
cout << setw(3) << right << magsquare[i][j];
}
cout << endl;
}
}
int main(){
int n = 5;
magicSquare(n);
return 0;
}
缩进可能看起来不正确,但它是正确的。对不起。
失败是因为标准 C++ 无法像您尝试的那样在堆栈上分配动态大小的数组。
int magsquare[n][n];
就 magicSquare
而言,n
仅在运行时已知,对于要在堆栈上分配的数组,其大小必须在编译时已知。
使用 15 x 15 阵列。
int magsquare[15][15];
只要你知道这是你需要的最大的,你应该没问题。
备选方案(您已经说过不能使用)
- 使用
new
声明所需维度的二维数组。 (不过记得删除[]) - 使用
std::vector
添加检查以拒绝 n 个大于 15 或小于 1 的值也是个好主意,否则如果将 1-15 以外的任何值传递给函数,您将面临未定义的行为。