如何设置2d数组2d返回

时间:2013-11-20 15:40:46

标签: c++ arrays multidimensional-array

编辑:发现一个可能的解决方案

我想将2d数组设置为2d返回,但它一直给我无意义错误:

In function 'int main()':
error: expected primary-expression before ']' token
error: expected primary-expression before ']' token
In function 'int initBoard(int (*)[25])':
error: invalid conversion from 'int (*)[25]' to 'int' [-fpermissive]

我不能弄清楚出了什么问题以及如何让错误消失。

#include <iostream>

using namespace std;

const short WIDTH = 80;
const short HEIGHT = 25;

int clearBoard();
int initBoard(int board[WIDTH][HEIGHT]);
int drawBoard();

int main()
{
     int board[WIDTH][HEIGHT] = {{0}};
     board = initBoard(board); // problem is this place AND should be initBoard(board);
     cout << board[79][24]
     return 0;
}

int initBoard(int board[WIDTH][HEIGHT])
{
    unsigned int localWidth  = 1;
    unsigned int localHeight = 1;

    while(localHeight < HEIGHT)
    {
        while(localWidth < WIDTH)
        {
            board[localWidth][localHeight] = 0;
            localWidth++;
        }
        localHeight++;
        localWidth = 1;
    }
}

2 个答案:

答案 0 :(得分:1)

函数initBoard的返回类型为int:

int initBoard(int board[WIDTH][HEIGHT]);

您正在尝试在return语句的函数体内转换为int类型int(*)[HEIGHT],并在调用该函数的语句中将int类型的对象分配给array。

在C / C ++中,数组没有赋值运算符。

以下列方式定义函数就足够了

void initBoard(int board[WIDTH][HEIGHT])
{
    unsigned int localWidth  = 1;
    unsigned int localHeight = 1;

    while(localHeight < HEIGHT)
    {
        while(localWidth < WIDTH)
        {
            board[localWidth][localHeight] = 0;
            localWidth++;
        }
        localHeight++;
        localWidth = 1;
    }
}

并在main中将其称为

initBoard(board); 

答案 1 :(得分:-1)

数组总是通过引用传递,您不需要显式返回它。您在函数中对其所做的任何更改都是全局的。你得到了编译错误,因为2d数组在技术上是“指向int的指针”或int**。您可以将initBoard更改为void,它应该有效。您没有分配数组,而是声明它们。

你可以做动态分配而不是编译时间,但是因为你似乎知道数组应该是多大,所以这可能比它的价值更麻烦。