C прототип функции: \\ char * strinv (const char * s); - PullRequest
2 голосов
/ 19 апреля 2020
char *strinv(const char *s); //that's the given prototype

Я немного не уверен насчет * strinv части. Означает ли это, что функция автоматически разыменовывается при вызове? Или что функция определена как указатель?

Заранее спасибо за разъяснения.

1 Ответ

1 голос
/ 19 апреля 2020

Это объявление функции

char * strinv(const char *s);

объявляет функцию с возвращаемым типом char *. Например, функция может динамически выделять память для строки и возвращать указатель на эту строку.

Вот демонстрационная программа, которая показывает, как, например, может быть определена функция.

#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] = '\0';
    }

    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 );
...