比如有
string a[10][10]
;
那么可以这样
void xxx(string a);
或者
void xxx(string a[][10]);
或者
void xxx(string a[10][10]);
使用的时候直接
xxx(a);
就行了
#include<stdioh>
#include<stringh>
#define M 100
#define N 25
int main()
{
char c1(char str[M]);
char s1[M];
puts("请输入一个字符串:");
gets(s1);
c1(s1);
return 0;
}
char c1(char str[])
{
char c[N]="\0",ch[N]="\0";
int i,j,k,m,n;
for(i=0,j=0;i<N,j<M;i++,j++)
{
c[i]=str[j];
if(str[j]==' ')
{
i=-1;
m=strlen(ch);
n=strlen(c);
if(n>m)//问题在这里 strlen求的是数组长度 你定义的都是N=25 m=n下面的都不执行了
for(k=0;k<n-1;k++)
ch[k]=c[k];
}
else if(str[j]=='\0')
{
i=-1;
m=strlen(ch);
n=strlen(c);
if(n>m)//这里也是
for(k=0;k<N;k++)
ch[k]=c[k];
}
}
puts(ch);
return 0;
}
二维字符数组做函数参数。char str[3][] = {"abcd", "def", "hij"};
定义:int function(char str);
不知道是不是你要问的。
C语言中,数组名作为函数参数,属于数组参数传递。在VB60中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。
数组型变量名本身只是该数组所占存储空间的首地址,函数调用时,系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。
扩展资料:
数组参数在传递时应注意以下两个方面:
1、 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。
2、被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。
-参数传递
区分二维字符数组的类型,有两种方式:
1 静态的二维数组。
也就是形式为char a[M][N]形式的数组,在传参数的时候,需要在形参中指明二维数组的宽度,也就是N值。
可以写成char a[M][N]的形式,也可以写成char a[][N]的形式。
另外,由于静态数组的单元是连续的,也可以转成一维数组传入,并在其它参数中指明二维数组的长和宽。不过在函数中访问时需要做对应的转换。
2 动态二维数组,即char p;在p上分配的二维数组,本质上为二维指针。 可以直接以char 类型参数传入。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)