0

当我运行下面的代码时

 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);
        }
    }
4

1 回答 1

2

The name of the function reverse is misleading as it suggest that the array is reversed in place. The name should be print_reversed or something since it doesn't change the array but print it reversed on the screen. Then there is nothing strange having it const char * const ptr.

于 2013-08-21T08:32:28.993 回答