关于传递数组参数给函数的问题.

varphone 2005-07-15 08:06:38
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"

void foo_ca(char ss[]);
void foo_pc1(char* ss[]);
void foo_pc2(char** pa);
void foo_ppc(char** pa);

int main(int argc, char** argv)
{
char ca[2][30] = {"The first element!\n\0","The second element!\n\0"};
char* pc[2] = {"The first element!\n\0","The second element!\n\0"};
char** ppc = (char**)new char[10][50];
ppc[0] = "The first element!\n";
ppc[1] = "The second element!\n";

foo_ca(ca); //failed,Why?

foo_pc1(pc);
foo_pc2((char**)&pc);
foo_ppc(ppc);

system("PAUSE");
return -1;
}

void foo_ca(char ss[])
{
printf("\nfoo_cc:\n");
printf(&ss[0]);
printf(&ss[1]);
}

void foo_pc1(char* ss[])
{
printf("\nfoo_pc1:\n");
printf(ss[0]);
printf(ss[1]);
}

void foo_pc2(char** ss)
{
printf("\nfoo_pc2:\n");
printf(ss[0]);
printf(ss[1]);
}

void foo_ppc(char** ss)
{
printf("\nnfoo_ppc:\n");
printf(ss[0]);
printf(ss[1]);
}

到底要怎么样才能把 ca 传给 foo_ca() 呢?
...全文
102 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ENOUGH_XU 2005-07-15
  • 打赏
  • 举报
回复
好了,成功了.真高兴,补了一个漏洞!!!
ENOUGH_XU 2005-07-15
  • 打赏
  • 举报
回复
多谢了,我再试试看,相信会成功的
xzgyb 2005-07-15
  • 打赏
  • 举报
回复
ENOUGH_XU(足球小兵):
可以通过,你的声明没改吧

varphone:你说的很对
所以
对于函数中的多维数组类型的参数
除了第一维以外其他维必须指定维数
因为编译器需要用来计算偏移量

aiguozhou 2005-07-15
  • 打赏
  • 举报
回复
学习
varphone 2005-07-15
  • 打赏
  • 举报
回复
郁闷,原来只是 foo_ca(char ss[][30]) 就可以搞定了。

应该是:如果不指定单个元素的大小,

编译器就不知道 printf(ss[1]) = printf(ss[0]+30+1),

而以为是 printf(ss[1]) = printf(ss[0]+1);
ENOUGH_XU 2005-07-15
  • 打赏
  • 举报
回复
to xzgyb(老达摩)
不行啊,通不过啊
tslkfyh 2005-07-15
  • 打赏
  • 举报
回复
ca是个二维数组,是指向指针的指针,你传ca[0]就表示把第一个字符串的指针传递进去了
ENOUGH_XU 2005-07-15
  • 打赏
  • 举报
回复
我错了,我不懂你的意思
xzgyb 2005-07-15
  • 打赏
  • 举报
回复
需要的是
void foo_ca(char ss[][30])
{
printf("\nfoo_cc:\n");
printf(ss[0]);
printf(ss[1]);
}
ENOUGH_XU 2005-07-15
  • 打赏
  • 举报
回复
二维数组的ca[0]就等与ca+0即表示第一个字符窜地址啊,ca[1]==ca+1是表示第二个字符窜的地址啊,c的书上都有的.
varphone 2005-07-15
  • 打赏
  • 举报
回复
编译是通过了,但却不是预想的输出结果.
为什么在定义的后面直接 printf(ca[0]); printf(ca[1]); 就可以正确输出呢?
郁闷啊...
ENOUGH_XU 2005-07-15
  • 打赏
  • 举报
回复
在我的编译器上只要改成foo_ca(*ca)就可以了.
这可能和二维数组的特性有关吧.
varphone 2005-07-15
  • 打赏
  • 举报
回复
foo_ca:
The first element!
he first element!

输出的结果有问题啊。
NetDNASupport 2005-07-15
  • 打赏
  • 举报
回复
foo_ca( (char*) ca ); //


--------------------Configuration: ca - Win32 Debug--------------------
Compiling...
ca.cpp
Linking...

ca.exe - 0 error(s), 0 warning(s)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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