当我使用
运行代码时 void reverse(char *ptr)
它有效。但在教科书中,函数原型是这样的:
void reverse(const char * const ptr )
为什么会那样?在第一个中,我假设我的指针可以指向不同的地址,并且它指向的值可以更改。在教科书原型中,它指向的地址和值都无法更改。但我们想要这个吗?乍一看因为它是递归的,它需要改变它指向的值和地址以便起作用。也许我在这里遗漏了一些东西。
#include <stdio.h>
void reverse(char *ptr);
int main(void)
{
char sentence[80];
puts("Enter a sentence");
fgets(sentence,80,stdin);
reverse(sentence);
getch();
}
//recursive reverse function
void reverse(char *ptr)
{
if (ptr[0]=='\0')
{
return;
}
else
{
reverse(&ptr[1]);
putchar(*ptr);
}
}
答案 0 :(得分:2)
函数reverse
的名称具有误导性,因为它表明数组已反转到位。名称应为print_reversed
或其他内容,因为它不会更改阵列,而是在屏幕上反转打印。然后有一点奇怪const char * const ptr
。