问题描述
- 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("failsen");
}
printf("[%s]n",dest[0]);
printf("[%s]n",dest[1]);
printf("[%s]n",dest[2]);
}请问写一个函数为二维数组赋值的时候,二维数组作为参数,应该怎么写,为什么?上面注释的地方为什么去掉50的时候就报错?
不知道为什么参数不能写成char **dest,如果这样,程序会崩溃!
解决方案
当你用 一维数组 作为参数时,参数要这么写:
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维数组 ,故必须按照我刚才说的写。
时间: 2024-11-16 13:43:58