c - 变量看起来像一个函数指针
问题描述
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
、类型char
的指针s
和类型的char *
函数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
推荐阅读
- android - 当用户在一台手机上登录时,相同的凭据不应在 android 中的另一台设备上登录
- android - 使用 ConstraintLayout 折叠工具栏布局
- c# - 异常堆栈跟踪没有行号
- perl - 如何创建 perl 别名?类型球?
- python - 比较字典并仅显示 Python 中的差异?
- html - 通过单击阻止和取消阻止要编辑的标签:Ionic
- rest - 当 API 调用上的响应 statusCode 大于 400 时在 Flutter 中构建小部件
- javascript - 如何在页面加载时动态更改 href 内容
- java - @InitBinder 不使用值方法名称
- python - Pywinauto 专注于新的下拉菜单