请问如何把一个二维数组作为函数参数传进一个函数?
请问如何把一个二维数组作为函数参数传进一个函数?
例如:
void tt(char **str)
{
}
void main()
{
char str[20][20];
tt(str);
}
以上程序编译通不过,请问函数tt的参数应该是什么,才能把二维数组传进去??
谢谢回复!! 问题点数:20、回复次数:16Top
1 楼613613(无余)
回复于 2004-06-27 23:03:29 得分 0
tt(str):这里面的str是个行指针(该行含20个元素),而char **str是个指向字符的指针。
所以不匹配。函数tt的参数应该是指向字符元素的,如:str[0].Top
2 楼613613(无余)
回复于 2004-06-27 23:10:52 得分 0
上面错了,,不好意思,,偶菜Top
3 楼613613(无余)
回复于 2004-06-27 23:30:52 得分 0
void tt(char **str) //(char *str)
{
}
void main()
{
char str[20][20];
tt(str); //tt(str[0])
}
偶菜,只会这样,,,5Top
4 楼somjet(求救的)
回复于 2004-06-27 23:51:49 得分 0
如果你是想得到数组中一个元素得位置,你可以用上面的方法,要是你想得到二维数组中的某个值你可以用变长数组来解决;
void tt(int rs,int cs,char ar[rs][cs]) //(char *str)
{
}
void main()
{ int r,c;
scanf("%d %",r,c);
char str[20][20];
tt(r,c,str);
}
可能我领悟错了,但这是我给的建议,谢谢Top
5 楼fanglinlin7841(猫猫)
回复于 2004-06-28 00:36:37 得分 10
如果是一个二维数组,例如: int a[3][4]
如果将a 作为参数传递给函数的话,函数的参数应该定义为 :int (*p)[4],此时便可顺利访问。代码如下:
#include <stdio.h>
void f( int (*p)[4]);
void main()
{
int a[3][4];
for( int i=0;i<3;i++)
for(int j=0;j<4;j++)
a[i][j]=i;
f(a);
}
void f( int (*p)[4])
{
printf("%d",*(*(p+1)+2); //此时访问的是a[1][2]
}
Top
6 楼tuqvb(风间苍月)
回复于 2004-06-28 00:42:22 得分 0
void tt(int rs,int cs,char ar[rs][cs]) //(char *str)
{
}
编译器会羞辱你的,因为要让它处理数组,你必须将数组的各维(低n-1维)界定设为常数
即让它在编译期间就能知道数组的大小
应该是void tt(int rs, int cs, char ar[][20])
这样才能编译通过,但是恐怕使用起来非常不爽,因为有一维的大小被定死了
Top
7 楼tuqvb(风间苍月)
回复于 2004-06-28 00:50:38 得分 0
如果是一个二维数组,例如: int a[3][4]
如果将a 作为参数传递给函数的话,函数的参数应该定义为 :int (*p)[4],此时便可顺利访问。
错了,不只编译通不过,而且仔细考虑一下内存分布
即时能通过编译,想一想到时候p[0..4]的内容各是什么呢?Top
8 楼bribin(锐冰)
回复于 2004-06-28 01:56:17 得分 0
只要改成void tt(char a[][20])就可以了Top
9 楼peter9606( 荷尔蒙一失效 人就清醒了)
回复于 2004-06-28 07:58:03 得分 10
总结一下:
如果参数是多维数组,那么参数必须指明第一维意外得所有未得长度:比如你的
void tt(char a[][20])或者 void tt(char (*a)[20])
另外这样也是可以的
char *a[10] ;
tt(a);
tt(&a[0]);
Top
10 楼vbar(S.Q.Y)
回复于 2004-06-28 09:15:52 得分 0
我在main里不知道为什么可以用
int test(char *fun[])
int main(int argc, char *argv[])
调用函数:test(argv)
这样子可以的Top
11 楼hqt1979()
回复于 2004-06-28 10:30:08 得分 0
首先非常感谢各位朋友的热心讨论!
的确,如以上朋友所说:若函数的参数是二维数组,函数原型应该写成这种形式:
void tt(char a[][20])或者 void tt(char (*a)[20])或者降为一维数组来处理。
但现在我有点搞不明白,为什么不能指明第一维的维数呢?编译器为什么要这样做?
那位朋友能解释一下原因,让大家理解的更透彻一些。Top
12 楼peter9606( 荷尔蒙一失效 人就清醒了)
回复于 2004-06-28 10:35:53 得分 0
我帮你 ding 偶也是看了C++ Primer上面这样说的 至于为什么恐怕要那些对编译器很熟悉的大牛们来指点了Top
13 楼yux007(yux007)
回复于 2004-06-28 10:56:48 得分 0
关注Top
14 楼Jarrylogin(正经事情我不会,歪门邪道样样行)
回复于 2004-06-28 11:23:30 得分 0
void tt(char a[][20])或者 void tt(char (*a)[20])数组指针的形式Top
15 楼jaredcsdn(Jared)
回复于 2004-06-28 17:09:37 得分 0
要我说就不要挖空心思了
直接 void tt(char *str, unsigned n) 算了
用 *(str+i*n+j) 取值死不了人的.
说白了, C在根本上就不支持二维数组, 楼主何必强求.Top
16 楼liu_feng_fly(笑看风云 搏击苍穹 衔日月)
回复于 2004-06-28 18:19:52 得分 0
使用STL啊,用vector