当然是零了。。。你调用length函数时,传过去的参数不是i,而是i的值,0;调用length时,会有新的i在length里;length调用完以后里面的东西都会销毁,这样length里的i就没有了;只剩下了main里的i,还是0.
所以,要这样:调用时:length(&i,a)
定义:char length(int *i,char a[]);(*i)++;
这样就是传过i的地址去,改变地址里的东西,那就行啦。
也可以把i弄成全局变量。在函数外部声明即可。
你的问题出在i这个变量.
函数调用是 调用入栈 操作,你函数调用好了以后 就会恢复i的值。
也就是说 你函数内部i和函数i不是一个变量 地址不一样的。
char lenth(int i,char a[]){
while(a[i]!='\0')
{
i++;
}
printf("%d",i);
return i;
}
void main(){
char lenth(int i,char a[]);
int i=0;
char a[100];
memset(a,0,100);
gets(a);
lenth(i,a);
getchar();
}
--------------------------------------------------------------------
第2种方式 传i的指针
void lenth(int* k,char a[]){
int i = 0;
while(a[i]!='\0'){
i++;
}
*k = i;
}
void main(){
int i;
char a[100];
memset(a,0,100);
gets(a);
lenth(&i,a);
printf("%d",i);
getchar();
}
1、lenth(i,a); 这里改成i=lenth(i,a);吧
2、lenth函数明明是char型的,你return一个int型的干嘛? 把函数改成int吧。
#include
int lenth(int i,char a[]);
int main(void)
{
int i=0;
char a[100];
gets(a);
i=lenth(i,a);
printf("%d\n",i);
return 0;
}
int lenth(int i,char a[])
{
while(a[i]!='\0')
{
i++;
}
return i;
}
正确代码是这样的 如果有什么不明白的可以继续追问。
把lenth(i,a);改为i=lenth(i,a);