如何将二维数组作为参数传递?

shootingstars 2006-05-15 09:28:15
char arr[2][128];

void fun(char *arr[])
{
printf("%s",arr[1]);
}

int _tmain(int argc, _TCHAR* argv[])
{
strcpy(arr[0], "google.com");
strcpy(arr[1], "google.cn");
fun((char **)arr);
}

我想打印google.cn....可是运行出错。
分析原因,是不应该将arr转化为char **,因为在fun中,编译器无法计算arr[1]和arr[0]的差值。

于是修改原型为:
void fun(char *arr, int Len)
{
printf("%s",arr + 1*Len);
}
fun((char *)arr, 128);
结果正确,但是看着变扭。。。


我看一般的main函数原型都是这样:
int _tmain(int argc, _TCHAR* argv[])
然后需要调用第一个参数时,直接
argv[1]即可,可不知为什么我的函数不能这样定义?如果想实现在调用直接使用arr[x]来访问第x行,请问该如何定义函数?
...全文
396 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ykyxkhjh 2006-05-15
  • 打赏
  • 举报
回复
楼主,弄清楚数组指针和指针数组的区别,就懂得为什么错了
shootingstars 2006-05-15
  • 打赏
  • 举报
回复
谢谢各位,想通了。结帖。
dreamXren 2006-05-15
  • 打赏
  • 举报
回复
char *arr[] = {"google.com", "google.cn"};
fun(arr);
这样不是也可以么?
铖邑 2006-05-15
  • 打赏
  • 举报
回复
实际上是一维的,每个元素是个字符串
铖邑 2006-05-15
  • 打赏
  • 举报
回复
argv[1]与argv[0]地址之间差值是不等的
shootingstars 2006-05-15
  • 打赏
  • 举报
回复
如果argv相当于char* *argv
那么argv[1]与argv[0]的地址之间差值如何计算?难道argv的二维大小是固定的?
lk_517 2006-05-15
  • 打赏
  • 举报
回复
argv相当于是具备变量特性的变量指针,而不是常量指针,你可以直接看成是char* *argv

程序动态获取你输入命令的个数,再根据这个个数分配argv的空间
铖邑 2006-05-15
  • 打赏
  • 举报
回复
_TCHAR* argv[] 只有一维,大小为argc
pressman 2006-05-15
  • 打赏
  • 举报
回复
想在fun中搜索这个arr数组?
shootingstars 2006-05-15
  • 打赏
  • 举报
回复
谢谢cunsh(村少)。
测试通过。

不过还想问一下main中的_TCHAR* argv[]参数并没有给出二维的大小,它是如何计算的?
cunsh 2006-05-15
  • 打赏
  • 举报
回复
char arr[2][128];

void fun(char (*arr)[128])
{
printf("%s",arr[1]);
}

int _tmain(int argc, _TCHAR* argv[])
{
strcpy(arr[0], "google.com");
strcpy(arr[1], "google.cn");
fun(arr);
}
铖邑 2006-05-15
  • 打赏
  • 举报
回复
char arr[2][128];

void fun(char *arr[])
{
printf("%s",arr[1]);
}

int main(int argc, char* argv[])
{
strcpy(arr[0], "google.com");
strcpy(arr[1], "google.cn");
fun(arr);
}
cunsh 2006-05-15
  • 打赏
  • 举报
回复
那你是什么意思
shootingstars 2006-05-15
  • 打赏
  • 举报
回复
楼上这位兄弟误解我的意思了。。。
我是想在fun中搜索这个arr数组,并非仅仅想输出一个字符串而已。
cunsh 2006-05-15
  • 打赏
  • 举报
回复
void fun(char arr[][128])
void fun(char (*)[128])
铖邑 2006-05-15
  • 打赏
  • 举报
回复
void fun(const char *arr)
{
printf("%s",arr);
}

int _tmain(int argc, _TCHAR* argv[])
{
strcpy(arr[0], "google.com");
strcpy(arr[1], "google.cn");
fun(arr[1]);
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧