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