题目及答案
下列程序的输出结果是C
A) yz B)z C)z D)x
xyz yz yz xy
xyz xyz
void main(){
char str[]="xyz",*ps=str;
while(*ps) ps++;
for(ps--;ps-str>=0;ps--) puts(ps);
}
问题分析:
- while里面是*ps意思是什么?while里面不是放条件的么? while (0)和while(1)在之前没有任何表达式的实况下 是判断什么为真假从而执行循环体的?
- ps++的意思是从y开始循环的么
- for里面的第一个ps–有用么?
- 答案是C没错 可是它是怎么循环使x在最后出现?
1、while里的*ps的意思是while (ps != 0)即ps为真,while(0)while(1)这里面的0和1就是表达式,分别为假和真,0为假,非零为真,while(ps)和这个是一个道理;
2、ps++的意思是指针后移一位,刚开始时,赋值ps=str,那么ps就指向str的首地址,即’x’的位置;
3、由于while循环中最后ps指向的位置是’\0’,所以这里ps–是有意义的,是的指针指向’z’;
4、循环的条件是ps-str >= 0即ps指向的位置在str的右边,显然,ps从’z’的位置一直向前移动过程中,ps一直在str的右边,所以最后输出的是这样的结果。
流程分析:
#include<stdio.h>
void main()
{
char str[] = "xyz";
char *ps=NULL;
ps = str;
//此时ps = &str[0]
while(*ps) //ps指向的内容不为空的继续循环
{
ps++;
}
//此时ps指向z后边的地址str[3] = 0 跳出while循环
//此时ps = &str[3]
//ps = &str[3] 此时ps-- 仍然ps = &str[3] -->*ps=0 而且ps-str>=0不成立 -->puts(ps)不输出-->ps--
//ps = &str[2] 此时ps-- 仍然ps = &str[2] -->*ps=z 所以ps-str>=0成立 -->puts(ps)输出z -->ps--
//ps = &str[1] 此时ps-- 仍然ps = &str[1] -->*ps=yz 所以ps-str>=0成立 -->puts(ps)输出yz -->ps--
//ps = &str[0] 此时ps-- 仍然ps = &str[0] -->*ps=xyz 所以ps-str>=0成立 -->puts(ps)输出xyz -->ps--
//
for(ps--;ps-str>=0;ps--)
{
puts(ps);
}
}
资料来源:
1、https://zhidao.baidu.com/question/1896118848768071460.html
2、https://zhidao.baidu.com/question/218887926.html