尝试修改和显示2D阵列时出错

时间:2016-01-17 18:08:35

标签: c++ arrays

我在main中创建了以下数组:

int arrayOne[40][60];   

我正在尝试用它做两件事:

  1. 使用执行此操作的函数
  2. 修改其内容
  3. 显示已修改的数组
  4. 这可能看起来很基本,但是,我似乎收到了错误消息。

    我正在尝试使用它来显示我的数组:

    void disArray(int [][60]);    // function prototype
    
    disArray(arrayOne);      //function call in main
    
    /*Actual function I use below */
    void disArray(int diArray[][60]) {
        for (int r = 10; r < 30; c++) {
            for (int c = 10; c < 50; r++) {
                cout << diArray[r][c] << " ";
            }
            cout << endl;
        }
    }
    

    我希望这会显示零,但事实并非如此。但是,我得到一个在我的显示器中重复数百次的数字(它的数字也相同,所以它不显示每个数组点的地址)。

    我遇到的第二个问题是我还需要通过将数组传递给函数来修改数组的内容。我试过这样做:

    int *pArrayOne;   //declared in main
    pArrayOne = &arrayOne[0][0];   //assigned in main
    
    void modArray(int*);    //function prototype
    
    modArray(pArrayOne);   //function call
    
    //I'm trying to change the values of the first three cells of the first row to 8
    void modArray(int *pOne) {        
        *pOne = 8;
        pOne++;
        *pOne = 8;
        pOne++;
        *pOne = 8;
    }
    

    但它似乎无法正常工作......

    如果有人可以教会如何显示那个大小的数组并有选择地修改它,那就太棒了! (请不要将此标记为其他地方的答案,因为我已经查看了许多其他帖子并且他们并没有真正帮助......对于那些知道阵列的人来说,这需要不到5分钟的时间来回答)

1 个答案:

答案 0 :(得分:1)

未初始化本地非静态变量,其内容为 indeterminate 。尝试使用它们除了初始化它们(例如打印它们的值)导致未定义的行为

如果要将数组初始化为全零,则需要明确地执行此操作:

int arrayOne[40][60] = { 0 };

要在函数中修改它,请照常执行:

void setElement(int array[][60], size_t row, size_t col, int value)
{
    array[row][col] = value;
}

...

setElement(arrayOne, 10, 20, 123);

上述代码将值123分配给arrayOne[10][20]