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维数组 ,故必须按照我刚才说的写。

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

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算