C 如何使用变量p声明指向函数的新指针
我有C 如何使用变量p声明指向函数的新指针,c,C,我有p像: typedef int (*p)(); 假设我要声明指针的函数是intfoo()。 我想声明一个指向函数foo的新指针,使用变量p使用typedef语句,如: typedef int emp[10]; emp p;// so now p is an array of size 10 of type int 使用typedef: typdef int (*FunctionPtr)(); int foo() { return 4; // chosen by fair d
p
像:
typedef int (*p)();
假设我要声明指针的函数是intfoo()
。
我想声明一个指向函数foo的新指针,使用变量p使用typedef语句,如:
typedef int emp[10];
emp p;// so now p is an array of size 10 of type int
使用typedef:
typdef int (*FunctionPtr)();
int foo()
{
return 4; // chosen by fair dice roll, should be random
}
FunctionPtr fptr = foo; // or &foo
int (*fptr)() = foo; // or &foo
没有typedef:
typdef int (*FunctionPtr)();
int foo()
{
return 4; // chosen by fair dice roll, should be random
}
FunctionPtr fptr = foo; // or &foo
int (*fptr)() = foo; // or &foo
p
是:
typedef int (*p) ();
p
类型变量为f
:
p f = &foo;
(*f)();
#include<stdio.h>
int foo(){
printf("\n In FOO\n");
return 4;
}
typedef int(*p)();
int main(){
p f = &foo;
int i = (*f)();
printf("\n i = %d\n", i);
return 1;
}
帮助解释函数指针的有用性。本文:
#包括
void f1(){printf(“helo\n”);}
void f2(){printf(“world\n”);}
类型定义结构函数
{
无效(*f)();
}func;
int main()
{
func a[]={{f1},{f2};
a[0].f();
返回0;
}
您的问题是什么?我想声明一个指向函数foo的新指针,使用变量p使用typedef语句。类似于typedef int emp[10];emp;//现在p是一个大小为10的数组,类型为int,那么(typedefint(*p)(;
)就可以了。名称p
将别名此类型。p
是指针类型的标识符。只需使对象属于该类型并分配给它们:pmyptr1,q;myptr1=foo;q=quux;myptr1()/*调用foo()*/;q()/*调用qux()*/代码>告诉我声明函数新指针的语法让我们使用'p'声明'q'我想使用变量p声明函数foo的新指针以使用typedef语句。类似于typedef int emp[10];emp;//现在p是一个大小为10的int-1型数组:在你的代码中,p是一个类型(sorta)。您不能分配给它。现在可以了。我撤销了-1。那绝对没问题。。。。但是我想声明一个新的指向函数的指针,而不是使用(*FunctionPtr)()来使用typedef的ur(*FunctionPtr)()statement@Aakash我完全不明白你的问题。我的方法中有什么“不够新”?试着用更好的英语重新表述你的要求,我不知道你在说什么。我想做以下事情,但它给出了错误typedefint(*p)();intfoo(){}intmain(){intc;pq;q=fun()c=(*q)();返回0;}@Aakash 1。把这个写在你的问题中,2。格式化它。那我就麻烦读了。看看高拉夫·乔汉的答案。我就是这么想的wanted@pmg是:),以及pf=foo代码>很好用…只是为了强调我用这种方式写的指针。@Girijesh我已经试过了。。它给出了以下2个错误1必须使用内存分配2删除语法的地址error@Aakash你可能犯了一些错误,请检查我证明其有效的链接。@gaurav与本案有关的一个疑问。。。为什么在我的问题中删除typedef语句中的“int”不会产生任何错误error@Aakash名字是Grijesh,实际上我忘记了之前的错误,没有更正,虽然函数的默认返回类型假定为int,但编译时没有错误,第二件事是我用Pmg先生建议的另一种技术进行了更新,找到答案中的第二个代码板链接
~$ gcc x.c -Wall
~$ ./a.out
In FOO
i = 4
#include <stdio.h>
void f1() {printf("helo\n");}
void f2() {printf("world\n");}
typedef struct func
{
void (*f)();
}func;
int main()
{
func a[] = {{f1}, {f2}};
a[0].f();
return 0;
}