bobzengcool
bobzengcool
采纳率100%
2013-10-15 14: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 风浪静 8年前

    当你用 一维数组 作为参数时,参数要这么写:
    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维数组 ,故必须按照我刚才说的写。

    点赞 1 评论 复制链接分享

相关推荐