微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决变量看起来像一个函数指针

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)之类的“()”,但没有。

那是什么?

解决方法

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

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类型的对象chars类型的指针char *和{类型的函数f {1}}。

这是一个演示程序。

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;
}
,

char *getoccupier(int),*p;声明getoccupier是一个带有int参数并返回指向char(a char *)的指针的函数,并声明{ {1}}是指向p的指针。

,
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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。