C语言的一道题目 为什么要换成指针,用变量a和b不行吗? 还有就

C语言的一道题目
为什么要换成指针,用变量a和b不行吗?
还有就是while(*s)是什么意思,什么时候需要写,用到指针指向字符串就要写一遍吗?

从主函数看到fun(s, &upper, &lower),知道函数fun的后两个参数是指针,所以上面的声明了肯定也必须是指针.
s[100]从主函数可以看出是一个字符数组, gets()函数最后会在得到的字符数组后加一个'\0';
s是首地址,所以*s表示的是数组的成员既 *s = s[0]; *(s+1)=s[1], *(s+2)=s[2]; ......当指向最后一个成员'\0'是while循环结束;
这题主要考的是取地址&和指针符号*还有gets()的使用,都是一些小知识点但容易错
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-09-18
1、题目中已经强调,不能修改main函数,注意第19行,&upper以及&lower是将upper与lower的变量地址传到fun函数中,其类型是指针,所以fun函数的后面两个参数是指针类型。故第3行后两个参数类型错误。
(假设此题目没有限定main函数不能更改,第19行你改为传入upper与lower,然后在20行打印的时候,upper与lower的值必然还是为0,因为按值传递时,fun函数里面的a、b只是upper与lower的一份拷贝,ab值的改变不影响upper、lower值,这块建议你看看【按值传递】这个知识点)
2、while (*s), s是一个char*类型指针,假设传入的字符串为“fang”,那么s的值等于'f'这个字符的地址。*s 为一个char字符,也就是'f', s++后,++产生的偏移为sizeof(char)长度,在s++后,s的值即为'a'这个字符的地址,此时*s等于'a',当*s为'g'时,继续s++,'g'后面的字符为'\0'(所有字符串的末尾都为0),那么*s就等于数字0(注意不是字符'0',数字0相当于NULL),这时候 while(*s) 相当于while(0) ,while条件为假(0为假,非0为真),while循环就会结束。规范的写法可以写为 while (*s != '\0')