C函数原型:\\char *strinv(const char *s);

C function prototype: \\char *strinv(const char *s);

char *strinv(const char *s); //that's the given prototype

我对 *strinv 部分有点不放心。这是否意味着该函数在调用时会自动取消引用?或者该函数被定义为一个指针?

提前感谢您的澄清。

这个函数声明

char * strinv(const char *s);

声明了一个 return 类型 char * 的函数。例如,该函数可以为一个字符串和 return 指向该字符串的指针动态分配内存。

这是一个演示程序,展示了如何定义函数。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char * strinv(const char *s)
{
    size_t n = strlen( s );

    char *t = malloc( n + 1 );

    if ( t != NULL )
    {
        size_t i = 0;

        for ( ; i != n; i++ ) t[i] = s[n-i-1];

        t[i] = '[=11=]';
    }

    return t;
}

int main(void) 
{
    const char *s = "Hello Worlds!";

    char *t = strinv( s );

    puts( t );

    free( t );

    return 0;
}

程序输出为

!sdlroW olleH

函数指针的声明看起来很傻

char * ( *fp )( const char * ) = strinv;

要取消引用指针并调用指向的函数,您可以编写

( *fp )( s );

虽然够写

fp( s );