变量看起来像一个函数指针

Variable looks like a function pointer

char *getoccupier(int roomno)
{
    //...
}

int main()
{
    int j;
    char *getoccupier(int), *p;

    for (j = 1; j <= NROOMS; j++)
    {
        if (p == getoccupier(j))
        {
            //...
        }
    }
}

在我看到的main函数中

*getoccupier(int)

变量。

我以为它是函数指针,但我不认为它是。

函数指针像(*getoccupier)(int)一样需要“()”,但它没有。

那是什么?

对于初学者来说,这似乎是你的意思

if ( ( p = getoccupier(j) )){

if ( ( p = getoccupier(j) ) != NULL ){

而不是

if (p == getoccupier(j)){

在函数 main 中

char *getoccupier(int), *p;

有函数 getoccupier 的块作用域函数声明。

虽然没有链接说明符 extern,但函数声明具有外部链接。所以你可能有同一个函数的多个声明。

注意函数声明中的参数名称可能会被省略,但同时又是函数定义。

也可以在一个声明中声明多个声明符,例如

char c, *s, f( int );

其中声明了 char 类型的对象 cchar * 类型的指针 sf 的函数 f输入 char( int ).

这是一个演示程序。

#include <stdio.h>

void hello( void ) { puts( "Hello"); }

int main(void) 
{
    hello();
    
    int hello = 10;

    printf( "Hello = %d\n", hello );

    {   
        void hello( void );
    
        hello();
    }
    
    printf( "Hello = %d\n", hello );

    return 0;
}

它的输出是

Hello
Hello = 10
Hello
Hello = 10

char *getoccupier(int), *p;getoccupier 声明为一个接受 int 参数并返回指向 charchar *)的指针的函数,并且它将 p 声明为指向 char.

的指针
char *getoccupier(int), *p;
...
p == getoccupier(j)

getoccupier 是一个接受 整数参数 并返回 pointer to char 的函数,即 p 的类型。这被解析为

char * (getoccupier) (int)

对比

char * (*getoccupier) (int)

表示pointer to function taking an integer parameter and returning pointer to char