Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指针作为函数的声明?_C_Pointers - Fatal编程技术网

C 指针作为函数的声明?

C 指针作为函数的声明?,c,pointers,C,Pointers,首先我要申报 char (*x)(int field); char yes_or_no(int); char yes_or_no(int field) { if(field==1) return 'y'; else return 'n'; } x=&yes_or_no; printf("Now we can call this function by using the pointer *x by using (*x)(1),\nwhich gives

首先我要申报

char (*x)(int field);
char yes_or_no(int);
char yes_or_no(int field)
{
    if(field==1)
    return 'y';
    else
    return 'n';
}

x=&yes_or_no;

printf("Now we can call this function by using the pointer *x by using (*x)(1),\nwhich gives us: \n'%c'\n", (*x)(1));
这可以正常工作,但现在我得做点什么了

char *y(int field);
哪个是或可能是函数的声明?我怎样才能对这最后一句话/声明“有所作为”


问候。

函数指针的类型为:

char *(*x) (int);
宣言:

char *y(int field);
请注意,一元运算符
&
不需要具有函数的地址。例如:

#include <stdio.h>

const char *(*x) (int);
const char *yes_or_no(int field);

const char *yes_or_no(int field)
{
    if (field == 1)
        return "y";
    else
        return "n";
}

int main(void)
{
    x = yes_or_no;
    printf("'%s'\n", x(1));
    return 0;
}
#包括
常量字符*(*x)(int);
常量字符*是或否(整型字段);
常量字符*是或否(整型字段)
{
如果(字段==1)
返回“y”;
其他的
返回“n”;
}
内部主(空)
{
x=是或否;
printf(“%s'\n”,x(1));
返回0;
}

函数指针的类型为:

char *(*x) (int);
宣言:

char *y(int field);
请注意,一元运算符
&
不需要具有函数的地址。例如:

#include <stdio.h>

const char *(*x) (int);
const char *yes_or_no(int field);

const char *yes_or_no(int field)
{
    if (field == 1)
        return "y";
    else
        return "n";
}

int main(void)
{
    x = yes_or_no;
    printf("'%s'\n", x(1));
    return 0;
}
#包括
常量字符*(*x)(int);
常量字符*是或否(整型字段);
常量字符*是或否(整型字段)
{
如果(字段==1)
返回“y”;
其他的
返回“n”;
}
内部主(空)
{
x=是或否;
printf(“%s'\n”,x(1));
返回0;
}
声明函数变量
x
,返回
char

char * y(int field);
声明一个函数
y()
返回
char*

注意第二个声明中缺少的一对括号
()

将声明seocnd情况的函数变量:

char * (*yvar)(int field);
声明函数变量
x
,返回
char

char * y(int field);
声明一个函数
y()
返回
char*

注意第二个声明中缺少的一对括号
()

将声明seocnd情况的函数变量:

char * (*yvar)(int field);

char*y(int字段)
是函数的声明,不能是。。注意
char*y(int字段)
是一个函数的声明,它返回一个指向
char
(并接受一个
int
参数)的指针也将起作用<代码>x=&是或否不是必需的。
char*y(int字段)
是函数的声明,不能。。注意
char*y(int字段)
是一个函数的声明,它返回一个指向
char
(并接受一个
int
参数)的指针也将起作用<代码>x=&是或否不是必需的。常用术语是函数指针,而不是变量,因为变量本身就是值的容器。其中,as指针是唯一地址的容器,对于函数来说是有意义的,因为它只包含函数代码段的起始地址+否则你是对的,我在这里是不准确的。无论如何,我觉得“变量”这个术语对理解是有意义的。所以我建议“函数指针变量”作为合理的折衷方案@fayyazkl常用的术语是函数指针,而不是变量,因为变量本身就是值的容器。其中,as指针是唯一地址的容器,对于函数来说是有意义的,因为它只包含函数代码段的起始地址+否则你是对的,我在这里是不准确的。无论如何,我觉得“变量”这个术语对理解是有意义的。所以我建议“函数指针变量”作为合理的折衷方案@Fayyazkl您应该提到char*y(int字段);实际上是一个名为y的函数,返回char*。它不是函数指针。()起了很大的作用。您应该提到char*y(int字段);实际上是一个名为y的函数,返回char*。它不是函数指针。答案()完全不同。