C++中二维数组在函数中传递时形参和实参应该怎么写

#include <iostream>
using namespace std;

void print( char ** );

int main()
{
const int length = 10;
char a[ 10 ][ 10 ];
a[ 2 ][ 2 ] = '1';
print( a );
}

void print( char **b )
{
cout << b[ 2 ][ 2 ] << endl;
}
这样子写的话是错的,应该怎么改(ps:我的目的是要传递一个未知大小的二维数组)

形参使用指向数组的指针,实参直接用数组名。


样例代码:

/* 注意列数必须要给出来,因为程序要计算(a+1)的位置就必须知道列数 */
int foo1(int (*a)[10]) {return a[1][0];}

/* 形参本质上仍是指向数组的指针,只是写成了数组的形式 */
int foo2(int a[10][10]) {return a[1][0];} 

/* 如上,既然本质上是指向数组的指针,行数就可以省略 */
int foo3(int a[][10]) {return a[1][0];}

#include <iostream>

int main()
{
    int a[10][10] = {0}; // 数组元素全初始化为0
    a[1][0] = 1;
    /* 以下三条语句均成功输出1 */
    std::cout << foo1(a) << std::endl;
    std::cout << foo2(a) << std::endl;
    std::cout << foo3(a) << std::endl;
    return 0;
 }

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-02
#include <iostream>
using namespace std;

void print( char b[][ length ] );

int main()
{
const int length = 10;
char a[ length ][ length ];
a[ 2 ][ 2 ] = '1';
print( a );
}

void print( char b[][ length ] )
{
cout << b[ 2 ][ 2 ] << endl;
}

传递时二维数组大小不能为止,特别是数组的最后一个的宽度。否则报错。追问

如果最后一个宽度事先不知道呢,之前定义数组时用了new

追答

那只能用链表。数组完不成的。

追问

啊?那我做迷宫的大作业又没学过来链表要传递maze这个二维数组不是做不了了吗

第2个回答  推荐于2018-03-04
#include <iostream>
using namespace std;

void print(char a[][10]);

int main() {
const int length = 10;
char a[10][10];
a[2][2] = '1';
print(a);
return 0;
}

void print(char b[][10]) {
cout << b[2][2] << endl;
}追问

void print(char b[][10])这里面的第二个[]里要写列大小,但如果用了new,事前不知道数组大小呢,怎么传递

追答

#include
using namespace std;

void print(char *a[],int n);

int main() {
const int length = 10;
char *a[30];
a[0] = new char[20];
a[0][2] = '1';
print(a,10);
return 0;
}

void print(char *b[],int n) {
cout << b[0][2] << endl;
}

追问

但是void print( char *maze[], int, int );int main(){const int c = 12;char maze[ c ][ c ] = { ' ' };for ( int i = 0; i < c; i++ ){for ( int j = 0; j < c; j ++ ){maze[ i ][ j ] = '#';}}print( maze, c, c );}void print( char *maze[], int c, int c ){for ( int i = 0; i < c; i++ ){for ( int j = 0; j < c; j++ ){cout << maze[ i ][ j ] << " ";}cout << endl;}}

追答

#include
#define N 12
using namespace std;

void print(char maze[][N],int);

int main() {
char maze[N][N] = {' '};
for(int i = 0; i < N; i++ ) {
for(int j = 0; j < N; j ++ ) {
maze[i][j] = '#';
}
}
print(maze,N);
}
void print(char maze[][N], int n) {
for(int i = 0; i < n; i++ ) {
for( int j = 0; j < n; j++ ) {
cout << maze[ i ][ j ] << " ";
}
cout << endl;
}
}

本回答被提问者和网友采纳
第3个回答  2012-06-02
#include <iostream>
using namespace std;

void prints( char b );

int main()
{
char a[ 10 ][ 10 ];
a[ 2 ][ 2 ] = '1';
prints( a[ 2 ][ 2 ] );
system("pause");
}

void prints( char b )
{
cout << b << endl;
}追问

额。。你没明白我的意思,我是想传递整个二维数组,而不是只是其中的一个元素。

追答

那你还说这样子写的话是错的怎么改!
#include
using namespace std;

void prints( char b[][10] );

int main()
{
char a[10][ 10 ];
a[ 2 ][ 2 ] = '1';
prints( a);

system("pause");
}

void prints( char b[][10] )
{
for (int i = 0;i < 10;i++)
{
for (int j = 0;j < 10;j++)
{
cout << b[i][j] << endl;
}
}

}

追问

如果事先不知数组大小呢

相似回答