2 bobzengcool bobzengcool 于 2013.10.15 22:04 提问

c语言二维指针作为参数的问题。

#include
int stringcut(char str, char dest[][50],int num,int lines)
/
如果这里不加上50会出错*/
{
char *temp=str;
int k=0;
if(strlen(str) ==NULL)
{
return -1;
}
for(k=0;k<lines;k++)
{
strncpy(dest[k],temp,num);
temp=temp+num;
}
return 0;
}
main()
{
char str[]="abcdefghijklmnopqrstuvwxyz";
char dest[3][50];
int ret;
memset(dest,0,150);
ret=stringcut(str,dest,5,3);
if(ret!=0)
{
printf("failse\n");
}
printf("[%s]\n",dest[0]);
printf("[%s]\n",dest[1]);
printf("[%s]\n",dest[2]);
}

请问写一个函数为二维数组赋值的时候,二维数组作为参数,应该怎么写,为什么?上面注释的地方为什么去掉50的时候就报错?
不知道为什么参数不能写成char **dest,如果这样,程序会崩溃!

1个回答

lym753024200
lym753024200   2013.10.16 11:45
已采纳

当你用 一维数组 作为参数时,参数要这么写:
char str[]或者char* str
也就是参数必须是 一维数组的首元素指针
同样,当你用 二维数组 作为参数时,参数要这么写:
char str[][N]或者char* str[N]
这里参数同样必须是 二维数组的首元素指针 ,但是对于二维数组来说,他的首元素就是 一维数组的指针 ,而 一维数组的指针 这个类型写法就是char* str[N],当去掉[N]后char* str表示的只是 单个元素的指针 ,所以必须有N,不能缺少。
所以做以下总结:
当用一个 N维数组 作为参数,其写法就是
char str[][N2][N3]...[Nn-1][Nn]或者char* str[N2][N3]...[Nn-1][Nn]
也就是说N维数组当参数,就必须写他的首元素的指针,但是 N维数组的首元素是N-1维数组 ,故必须按照我刚才说的写。

bobzengcool
bobzengcool 谢谢你的回答!!!
4 年多之前 回复
lym753024200
lym753024200 当你传一维数组到一个函数时,你应该在函数参数列表中添加char str[]这样一个参数,另外必须再添加一个int n参数来指明这个一维数组的大小,你既然想要传二维数组,那除了char str[][N]外,也就同样要int n来指明这个二维数组的第一维大小(另一维通过N就知道了,所以不必要)。至于你的想法我以前也想过,但是正如你知道传递一位数组就必须指定一个指针和一个维数,二维数组规定也就同样如此。你可以在函数调用前先用代码得到即将传出的数组的大小,然后传递给这个专门控制维数的int n就能解决问题,你的想法只能说不一定不可行,但确实不是个好解决方案。
4 年多之前 回复
bobzengcool
bobzengcool 谢谢你的回答,要是我想传一个二维数组到函数,但是我不知道这个二维数组有多少行多少列,只有在调用这个函数的时候才知道这个二维数组的参数的实际大小,这种情况可以实现么?
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!