变量看起来像一个函数指针
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
类型的对象 c
、char *
类型的指针 s
和 f
的函数 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
参数并返回指向 char
(char *
)的指针的函数,并且它将 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
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
类型的对象 c
、char *
类型的指针 s
和 f
的函数 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
参数并返回指向 char
(char *
)的指针的函数,并且它将 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