首页 > 试题广场 >

这个练习涉及到了字符串、循环、指针和指针增量的使用。首先,假

[问答题]
这个练习涉及到了字符串、循环、指针和指针增量的使用。首先,假设已经定义了下面的函数:
#include <stdio.h>
char *pr (char *str)
{
char *pc;
pc = str;
while (*pc)
putchar (*pc++);
do {
putchar (*--pc);
} while (pc - str);
return (pc);
}
考虑下面的函数调用:
x = pr ("Ho Ho Ho! ");
a. 会打印出什么?
b. x是什么类型?
c. x值等于多少?
d. 表达式*--pc是什么意思?它和--*pc有什么不同?
e. 如果用*pc--代替*--pc,会打印出什么?
f.两个while表达式有什么判断功能?
g. 如果pr()函数的参数是一个空字符串,会有什么结果?
h. 怎样调用函数pr()才能实现所示的功能?
推荐
a. Ho Ho Ho! ! oH oH oH
b. 指向char的指针,也就是说,char*。
c. 第一个H的地址。
d. *--pc把指针减1并使用那里的值。--*pc取出pc指向的值然后把那个值减1(例如把H变为G)。
e. Ho Ho Ho! ! oH oH o
说明:在!和!之间有一个空字符,但是它不产生任何打印效果。
f. while (*pc)检查pc是否指向一个空字符(也就是说字符串的结尾)。这个表达式使用指针所指向位置的值。
while (pc-str)检查pc是否与str指向同一个地址(字符串的开始)。这个表达式使用指针本身的值。
g. 在第一个while循环之后,pc指向空字符。进入第二个循环后令它指向空字符之前的存储区,也就是说str指向的位置之前的位置,把那个字节解释为一个字符并进行打印。然后指针再退回到前面的字节处。永远都不会满足终止条件(pc= =str),所以这个过程会一直继续下去。
h. 必须在调用程序中对pr()进行声明:char *pr (char*);
发表于 2018-03-19 21:35:26 回复(1)