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

#include<iostream>usingnamespacestd;voidprint(char**);intmain(){constintlength=10;cha... #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:我的目的是要传递一个未知大小的二维数组)
展开
 我来答
8826055
推荐于2016-11-04 · TA获得超过7511个赞
知道大有可为答主
回答量:1680
采纳率:81%
帮助的人:926万
展开全部

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


样例代码:

/* 注意列数必须要给出来,因为程序要计算(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;
 }
两极漂流
2012-06-02
知道答主
回答量:41
采纳率:0%
帮助的人:19.6万
展开全部
#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
追答
那只能用链表。数组完不成的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoalyg
推荐于2018-03-04 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2408万
展开全部
#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;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chenloveheimei
2012-06-02 · TA获得超过152个赞
知道小有建树答主
回答量:316
采纳率:50%
帮助的人:206万
展开全部
#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;
}
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式