C++ 如何定义一个函数,其参数从main()函数中获取变量?
我遇到了定义一个函数的需要,该函数的参数从main()函数中获取参数。代码如下:C++ 如何定义一个函数,其参数从main()函数中获取变量?,c++,arrays,function,C++,Arrays,Function,我遇到了定义一个函数的需要,该函数的参数从main()函数中获取参数。代码如下: #include <iostream> using namespace std; void unravel(char arr[][column], int field[][column], int x, int y) { //revealing adjoined cells for (int minusrows = -1; minusrows < 2; minusrows++){
#include <iostream>
using namespace std;
void unravel(char arr[][column], int field[][column], int x, int y) { //revealing adjoined cells
for (int minusrows = -1; minusrows < 2; minusrows++){
for (int minuscolumns = -1; minuscolumns < 2; minuscolumns++){
arr[x + minusrows][y + minuscolumns] = field[x + minusrows][y + minuscolumns] + '0';
}
}
}
int main (){
int row, column;
cin >> row >> column;
char a[row][column];
int field[row][column];
for (int i = 0; i < row; i++){ //filling a with asterisks, field with integers
for (int j = 0; j < column; j++){
a[i][j] = '*';
field[i][j] = i + j;
}
}
int x = 2, y = 3;
unravel(a, field, x, y);
for (int i = 0; i < 5; i++){ //printing out the array a
for (int j = 0; j < 5; j++){
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
因此,目标是将最初由星号(*)组成的二维数组a[][]中单元格周围的值更改为具有相同索引的int二维数组字段[][]的值。函数unravel()就是为此负责的。当我使用整数5而不是行和列时,代码工作得非常好
#包括
使用名称空间std;
无效展开(字符arr[][5],整型字段[][5],整型x,整型y){//显示相邻单元格
对于(int-minusrows=-1;minusrows<2;minusrows++){
对于(int-minuscolumns=-1;minuscolumns<2;minuscolumns++){
arr[x+minusrows][y+minuscolumns]=字段[x+minusrows][y+minuscolumns]+'0';
}
}
}
int main(){
字符a[5][5];
整型字段[5][5];
对于(int i=0;i<5;i++){//用星号填充a,用整数填充字段
对于(int j=0;j<5;j++){
a[i][j]='*';
字段[i][j]=i+j;
}
}
int x=2,y=3;
解开(a,场,x,y);
对于(int i=0;i<5;i++){//打印出数组a
对于(int j=0;j<5;j++){
cout在main()
中的这些行:
导致尝试使用运行时值声明数组
<> > C++中的数组必须用编译时表达式表示它们的大小,而不是运行时值。
最简单的解决方案是使用std::vector
。使用typedef
或使用
可简化此过程:
#include <vector>
using Char1D = std::vector<char>;
using Char2D = std::vector<Char1D>;
using Int1D = std::vector<int>;
using Int2D = std::vector<Int1D>;
int main()
{
int row, column;
cin >> row >> column;
Char2D a(row, Char1D(column,'*'));
Int2D field(row, Int1D(column));
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
field[i][j] = i + j;
}
//...
int x = 2, y = 3;
unravel(a, field, x, y);
}
请注意,我们传递引用,模拟实际使用二维数组时的行为
基本上其他所有内容都保持不变。动态2D数组可以声明为指向数组的指针数组,如下所示
int** a = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
a[i] = new int[colCount];
int**a=newint*[rowCount];
对于(int i=0;i
详情请参阅:
所以,如果您使用new关键字来声明2D数组,您的代码将运行良好
#include <iostream>
using namespace std;
void unravel(char **arr, int **field, int x, int y) { //revealing adjoined cells
for (int minusrows = -1; minusrows < 2; minusrows++){
for (int minuscolumns = -1; minuscolumns < 2; minuscolumns++){
arr[x + minusrows][y + minuscolumns] = field[x + minusrows][y + minuscolumns] + '0';
}
}
}
int main (){
int row, column;
cin >> row >> column;
char **a = new char*[row];
int **field = new int*[row];
for (int i = 0; i < row; i++){ //filling a with asterisks, field with integers
a[i]=new char[column];
field[i] = new int[column];
for (int j = 0; j < column; j++){
a[i][j] = '*';
field[i][j] = i + j;
}
}
int x = 2, y = 3;
unravel(a, field, x, y);
for (int i = 0; i < row; i++){ //printing out the array a
for (int j = 0; j < column; j++){
cout << a[i][j] << " ";
}
cout << endl;
}
for(int i=0; i<row; i++){
delete [] a[i];
delete [] field[i];
}
delete [] a;
delete [] field;
return 0;
}
#包括
使用名称空间std;
无效展开(字符**arr,整数**字段,整数x,整数y){//显示相邻单元格
对于(int-minusrows=-1;minusrows<2;minusrows++){
对于(int-minuscolumns=-1;minuscolumns<2;minuscolumns++){
arr[x+minusrows][y+minuscolumns]=字段[x+minusrows][y+minuscolumns]+'0';
}
}
}
int main(){
int行,列;
cin>>行>>列;
字符**a=新字符*[行];
整数**字段=新整数*[行];
对于(inti=0;i
CUT< Calp> CAR[A](行)[INT],INTROL[FARE] [BRO] [Boo],这是无效的C++ C++数组必须有一个常量表达式表示的大小,而不是运行时变量。C++中的动态数组是用<代码> STD::vector < /代码>完成的。
#include <vector>
using Char1D = std::vector<char>;
using Char2D = std::vector<Char1D>;
using Int1D = std::vector<int>;
using Int2D = std::vector<Int1D>;
int main()
{
int row, column;
cin >> row >> column;
Char2D a(row, Char1D(column,'*'));
Int2D field(row, Int1D(column));
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
field[i][j] = i + j;
}
//...
int x = 2, y = 3;
unravel(a, field, x, y);
}
void unravel(Char2D& arr, Int2D& field, int x, int y)
{
//...
}
int** a = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
a[i] = new int[colCount];
#include <iostream>
using namespace std;
void unravel(char **arr, int **field, int x, int y) { //revealing adjoined cells
for (int minusrows = -1; minusrows < 2; minusrows++){
for (int minuscolumns = -1; minuscolumns < 2; minuscolumns++){
arr[x + minusrows][y + minuscolumns] = field[x + minusrows][y + minuscolumns] + '0';
}
}
}
int main (){
int row, column;
cin >> row >> column;
char **a = new char*[row];
int **field = new int*[row];
for (int i = 0; i < row; i++){ //filling a with asterisks, field with integers
a[i]=new char[column];
field[i] = new int[column];
for (int j = 0; j < column; j++){
a[i][j] = '*';
field[i][j] = i + j;
}
}
int x = 2, y = 3;
unravel(a, field, x, y);
for (int i = 0; i < row; i++){ //printing out the array a
for (int j = 0; j < column; j++){
cout << a[i][j] << " ";
}
cout << endl;
}
for(int i=0; i<row; i++){
delete [] a[i];
delete [] field[i];
}
delete [] a;
delete [] field;
return 0;
}
for(int i=0; i<row; i++){
delete [] a[i];
delete [] field[i];
}
delete [] a;
delete [] field;