这个程序是输出s字符数组中的全部单词。
输出结果应该是:
what
is
your
name?
1. 输出全部单词
do cout<
2. 求得下一个单词
while(**pp==' ')(*pp)++; //剔除当前单词前的空格
char *pw=word;
while(**pp&&**pp!=' ')*pw++=*(*pp)++; //非空格字符就赋值给word直到遇到空格或字符串结束符
*pw=' \0';
这程序不难吧,看不懂是因为你指针没弄清楚,看见两个 * 就觉得难了
你仔细分析还是很简单的
先不管别的,程序运行之后执行主函,循环调用 nextword函数,do while 条件使用的 *ps指向主函中定义的字符串数组的单个字符,当指向最后一个字符——‘\0’ 程序就结束,gechar只不过是为了你能够看清输出才设置的,要求用户随便按个键程序才退出
重点讲一下nextword函数吧
这个函数传二级指针参数,这我说不出有什么意义,估计就是教科书想难为一下学生才这么做吧;
这个二级指针指向的地址里面的内容等于数组 s[]的首地址,有点绕
一进子程序就创建个 位于静态区的数组,没啥好处,图省事吧,不用初始化数组了,数组默认被系统初始化为 0
然后while 循环判断读到的字符是否是空格,如果是空格则让二级指针**pp里面的内容 *pp++,这里也就相当于让二级指针 **pp里面的内容变为 数组 s[] 的第二个字符——s[1] 的地址
如果你能够理解上述说明了的话,接下来的就很简单的了
while(**pp&&**pp!=' ')*pw++=*(*pp)++;
条件中的 **pp指的是:作为参数传进来的数组指针指向的元素是否是 0 如果不是 && 号前面部分的值为 1
**pp != ‘ ’这个不用讲了吧?就判断是否是空格
*pw++=*(*pp)++;这一句的意思就是复制传参**pp指向的内容到pw中咯
pp是个二级指针,*pp就 把pp中的内容当做地址取地址中的值,又由于 * 运算符的优先级比 ++高,于是又执行*(*pp),就是再将刚刚得到的值当做地址,继续取值,就找到了 数组s[]中的字符了
*pw++,原理一样。不过就是指针嘛
又因为字符串的结束标志是‘\0’,所以在pw后面补个‘\0’
整个程序就做了个很简单的事情,把数组中的单词以空格区分 打印输出
分析至此,不懂再问
不就是函数的调用,复杂点的也就是什么二级指针啊
哪里看不懂?就是普通的代码啊?