bobzengcool 2013-10-15 14:04 采纳率: 100%
浏览 2672
已采纳

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条回答

  • 普通网友 2013-10-16 03: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维数组 ,故必须按照我刚才说的写。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备