当我运行下面的代码与递归反转句子代码。为什么常量指针指向一个常量字符?
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);
}
}
什么课本?任何提供该签名的教科书都是错误的。 –
Deitel C如何编程第六版 – Lyrk
嗯,我错过了所有这个功能是打印字符串反向......副作用。但是我错过了这一点,因为你的问题在这个问题上毫无意义。当功能没有改变什么时,你为什么会认为签名是错误的? “它指向的值和地址需要被改变才能运行” - 不,显然没有任何变化......每个递归调用都有自己的参数和局部变量。 –