如何将二维数组设置为二维返回[重复]
Posted
技术标签:
【中文标题】如何将二维数组设置为二维返回[重复]【英文标题】:How to set 2d array a 2d return [duplicate] 【发布时间】:2013-12-04 16:51:01 【问题描述】:编辑:可能找到了解决方案
我想将二维数组设置为二维返回,但它总是给我一些无意义的错误:
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;
【问题讨论】:
欢迎来到 Stack Overflow。请尽快阅读About 页面。您确定您粘贴的代码会生成关于]
的两个错误吗?它不应该;当我编译代码时它不会。 (它合理地抱怨其他事情,但它并没有抱怨。)您可能必须在程序上运行预处理器并查看输出,这可能令人生畏(我从前 17 行得到了 16437 行输出代码行;幸运的是,我只需要查看最后 17 行输出)。如果你使用g++
,试试g++ -E program.cpp
,看看数组定义是否OK。
【参考方案1】:
函数 initBoard 的返回类型为 int:
int initBoard(int board[WIDTH][HEIGHT]);
您试图在 return 语句的函数体内转换为 int type int ( * )[HEIGHT] 类型,并在调用该函数的语句中将一个 int 类型的对象分配给数组。
在 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);
【讨论】:
【参考方案2】:数组总是通过引用传递的,你不需要显式地返回它。您在函数中对其所做的任何更改都是全局的。您收到编译错误是因为二维数组在技术上是“指向 int 指针的指针”或int**
。您可以将initBoard
更改为void
,它应该可以工作。您不分配数组,而是声明它们。
您可以进行动态分配而不是编译时间,但是由于您似乎知道数组的大小应该是多少,所以这可能比它的价值更麻烦。
【讨论】:
此外,该函数被声明为返回int
,但您(OP)正试图将数组指针作为int
返回。在这种情况下,函数应该返回void
,并且应该删除return board;
语句。
天哪;哦亲爱的!不,数组不是int *
。我赞成您的原始答案,因为它是准确的,如果有点少的话。我现在投了反对票,因为它是错误的(但如果你修复它,我会删除我的反对票)。在许多情况下,数组的名称转换为int *
。然而,在这种情况下,数组是一个二维数组,它变成了一个int (*)[25]
,一个指向25个数组的指针int
。此外,您不能在 C++(或 C)中分配数组。
您已对其进行了修改,但二维数组与int **
不同。类型的数组和类型的指针之间存在差异。在某些情况下,两者看起来很相似,因为数组会自动转换为指向该类型的指针,但仍然存在差异。查找值 matrix[i][j]
的机制因变量定义是 int matrix[10][20];
还是 int **matrix;
(或者实际上是 int *matrix[10];
)而有很大差异。
很公平。我会读一些关于这个主题的书。以上是关于如何将二维数组设置为二维返回[重复]的主要内容,如果未能解决你的问题,请参考以下文章