Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何定义一个函数,其参数从main()函数中获取变量?_C++_Arrays_Function - Fatal编程技术网

C++ 如何定义一个函数,其参数从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++){

我遇到了定义一个函数的需要,该函数的参数从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++){
        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;iCUT< 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;