首页 > 解决方案 > 变量看起来像一个函数指针

问题描述

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

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

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

在我看到的主要功能中

*getoccupier(int)

多变的。

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

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

那是什么?

标签: cscopefunction-declaration

解决方案


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

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

其中声明了类型的对象c、类型char的指针s和类型的char *函数fchar( 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

推荐阅读