递归反转句子代码。为什么常量指向常量char?

时间:2013-08-21 08:26:56

标签: c pointers recursion const reverse

当我使用

运行代码时
 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);
        }
    }

1 个答案:

答案 0 :(得分:2)

函数reverse的名称具有误导性,因为它表明数组已反转到位。名称应为print_reversed或其他内容,因为它不会更改阵列,而是在屏幕上反转打印。然后有一点奇怪const char * const ptr