今天在看书时,对于《明解C语言(入门篇)》第三版中的代码清单9-9产生了疑问。代码如下:
/*
遍历字符串显示
*/
#include <stdio.h>
/*---显示字符串s(不换行)---*/
void put_string(const char s[])
{
int i = 0;
while (s[i])
putchar(s[i++]);
}
int main(void)
{
char str[128];
printf("请输入字符串:");
scanf_s("%s", str, 32);
printf("你输入了:");
put_string(str);
printf("。\n");
return 0;
}
在其中第10行第11行,有如下这么一段,在当天困扰了我好久,我很不理解这么一句话是如何能够输出整个字符串的。现在提供一些我的思路,欢迎大家讨论。
while (s[i])
putchar(s[i++]);
我们将上边的代码改写如下,依旧可以正常运行。
while (s[i]) {
putchar(s[i]);
i++;
}
在此,需要学习一下后置递增运算:i++。i++是后置递增运算符,该表达式表达的是递增前的值。使用后置递增运算符的表达式,进行判断后得到递增后的值。
总结一下:i++ 执行时 执行后
递归前的值(i) 递归后的值(i+1)
我们在学习了i++的特性后,再回头看一下上边的代码段。其过程用语言描述一下:
1、通过while()语句判断s[0]内的元素是不是null,如果是null,结束循环,如果不是往下进行;
2、输出s[0]内中的元素,同时i++使得i=1;
3、通过while()语句判断s[1]内的元素是不是null,如果是null,结束循环,如果不是往下进行;
4、输出s[1]内中的元素,同时i++使得i=2;
等
等
等
2*n+1、通过while()语句判断s[n]内的元素是不是null,如果是null,结束循环,如果不是往下进行;
2*n+2、s[n]中存放着null,循环结束。
整体来看,只需要两行代码就可以将整个字符串内的元素输出。
以上只代表个人观点,欢迎大家讨论。