求问怎么理解c语言这个语句typedef int (*a)();

stormier 2013-12-18 09:15:44
a是个什么东西?怎么用?
...全文
473 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pump天天学习 2013-12-19
  • 打赏
  • 举报
回复
引用 5 楼 stormier 的回复:
[quote=引用 2 楼 modyaj 的回复:] a是个指针 指向一个函数 该函数的参数是0个 返回值是int的类型 至于怎么用 网上搜一下 函数指针和指针函数 彻底弄懂他们了就简单了 给个地址 http://www.programfan.com/blog/article.asp?id=6030
同上。 比如我自己写一个也行。 typedef int (*a)(); int b() {return 1;} a c=b; c(); 绝对错误[/quote] 没有错误
max_min_ 2013-12-19
  • 打赏
  • 举报
回复
定义函数指针!
亚细亚 2013-12-19
  • 打赏
  • 举报
回复
typedef int (*a)();是定义一个函数指针;a是函数名称,*号在这里可有可无;只不过在应用的时候有所不同;
modyaj 2013-12-19
  • 打赏
  • 举报
回复
引用 13 楼 sinservice 的回复:
诸位看下这个: int * (* ( * a)())[10];
反正我就用左右法则来读 还是能理解的了
qdlgdx_lsy 2013-12-19
  • 打赏
  • 举报
回复

#include <stdio.h>

int main() {
	typedef int (*a)();
	int b()
	{return 1;}

	int (*d)() = &b;
	a c=b;
	printf("%d\n", (*c)());
        printf("%d\n", c());
	printf("%d\n", d());
}
都是1.谁能解释一下??
ForestDB 2013-12-19
  • 打赏
  • 举报
回复
# include <stdio.h>

typedef int (*a)();

int b()
{
    return 1;
}

int main()
{
    a c=b;
    int i = c();
    printf("%d\n", i);
    return 0;
}
赵4老师 2013-12-19
  • 打赏
  • 举报
回复
//char (*(*x[3])())[5];//x是什么类型的变量?
//
//分析C语言声明,关键是搞清楚这个变量是个什么东西(函数、指针、数组),
//是函数那么剩下的就是他的参数和返回值,
//是指针那剩下部分是说明他指向什么,
//是数组剩下的部分就是说明数组的成员是什么类型。
//解析C语言声明规则:
//从左侧第一个标识符开始,按照优先级进行结合。*表示是..的指针,const表示只读的,volatile表示可变的,[]表示是数组,()表示是函数。
//
//x和[3]结合说明是一个大小为3的数组,该数组指向了一个指针,该指针指向一个函数,该函数的无参数,返回一个指针,该指针指向一个大小为5的char型数组
#include <stdio.h>
#include <typeinfo.h>
char num[5];
char (*x00())[5] {
    return #
}
int main() {
    char (*x000)[5];//返回值
    char (*(x00)())[5];//函数原型,参数为空,返回值为指针
    char (*(*x0)())[5];//数组的元素,是个函数指针
    char (*(*x[3])())[5];//是个数组,大小为3

    x0 = x00;
    x[0] = x0;
    x[1] = x0;
    x[2] = x0;
    printf("typeid(x).name() is %s\n",typeid(x).name());
    return 0;
}
//typeid(x).name() is char (* (__cdecl**)(void))[5]
#include <stdio.h>
double A[300][100];
double valuex[300];
double valuey[300];
int i;
double fun00(double x,double y) {return x  +   y  ;};
double fun01(double x,double y) {return x*x+ 3*y  ;};
double fun02(double x,double y) {return x  + 2*y*x;};
//...  fun03(double x,double y) {return ...+...   ;};
//...
//...  fun98(double x,double y) {return ...+...   ;};
double fun99(double x,double y) {return x/2+20*y  ;};
double (*funNN[100])(double,double)={
    fun00,
    fun01,
    fun02,
//  fun03,
//  ...
//  fun98,
    fun99,
};
int main() {
    double x,y;
    int f,FN;

    for (i=0;i<300;i++) {
        valuex[i]=(double)i;
        valuey[i]=(double)i;
    }
    FN=3;
    for (i=0;i<300;i++) {
         x=valuex[i];
         y=valuey[i];
         for (f=0;f<FN;f++) A[i][f]=funNN[f](x,y);
    }
    for (i=0;i<3;i++) {
        for (f=0;f<FN;f++) printf("%lg ",A[i][f]);
        printf("\n");
    }
    return 0;
}
//0 0 0
//2 4 3
//4 10 10
大奶兔白糖 2013-12-19
  • 打赏
  • 举报
回复
引用 10 楼 qdlgdx_lsy 的回复:

#include <stdio.h>

int main() {
	typedef int (*a)();
	int b()
	{return 1;}

	int (*d)() = &b;
	a c=b;
	printf("%d\n", (*c)());
        printf("%d\n", c());
	printf("%d\n", d());
}
都是1.谁能解释一下??
2楼哥们儿发的链接里面有你这个问题的答案
「已注销」 2013-12-19
  • 打赏
  • 举报
回复
诸位看下这个: int * (* ( * a)())[10];
「已注销」 2013-12-19
  • 打赏
  • 举报
回复
引用 5 楼 stormier 的回复:
[quote=引用 2 楼 modyaj 的回复:] a是个指针 指向一个函数 该函数的参数是0个 返回值是int的类型 至于怎么用 网上搜一下 函数指针和指针函数 彻底弄懂他们了就简单了 给个地址 http://www.programfan.com/blog/article.asp?id=6030
同上。 比如我自己写一个也行。 typedef int (*a)(); int b() {return 1;} a c=b; c(); 绝对错误[/quote] 绝对正确。
「已注销」 2013-12-19
  • 打赏
  • 举报
回复
引用 25 楼 stormier 的回复:
[quote=引用 12 楼 sinservice 的回复:] [quote=引用 5 楼 stormier 的回复:] [quote=引用 2 楼 modyaj 的回复:] a是个指针 指向一个函数 该函数的参数是0个 返回值是int的类型 至于怎么用 网上搜一下 函数指针和指针函数 彻底弄懂他们了就简单了 给个地址 http://www.programfan.com/blog/article.asp?id=6030
同上。 比如我自己写一个也行。 typedef int (*a)(); int b() {return 1;} a c=b; c(); 绝对错误[/quote] 绝对正确。 [/quote] 你试过么就胡说八道。(*c)()才对。不懂就别说。OK?![/quote] 这么简单的东西,你试试就知道。 虽然简单,我每天都用,但是为了准确回帖,我还是在回帖前就在编译器上实验了。
lizadana 2013-12-19
  • 打赏
  • 举报
回复
窃以为—— (*c)(); /*调用函数指针,正常*/ c(); /*函数名本身就是地址,与引用的地址相同,即地址c、&(c)和&(*c)一样,这是特殊点*/ d(); /*普通函数地址传递调*/
Pump天天学习 2013-12-19
  • 打赏
  • 举报
回复
引用 24 楼 stormier 的回复:
[quote=引用 20 楼 a345485527 的回复:] [quote=引用 5 楼 stormier 的回复:] [quote=引用 2 楼 modyaj 的回复:] a是个指针 指向一个函数 该函数的参数是0个 返回值是int的类型 至于怎么用 网上搜一下 函数指针和指针函数 彻底弄懂他们了就简单了 给个地址 http://www.programfan.com/blog/article.asp?id=6030
同上。 比如我自己写一个也行。 typedef int (*a)(); int b() {return 1;} a c=b; c(); 绝对错误[/quote] 没有错误[/quote] 有错。(*c)()才对。不懂就别说。[/quote] 呵呵,难道lz试过?复制粘贴再运行一下,不麻烦

#include <stdio.h>

typedef int (*a)();
int b()
{return 1;}

int main()
{
	a c=b;
	//c();
	printf("%d\n",c());
	printf("%d\n",(*c)());
	return 0;
}
stormier 2013-12-19
  • 打赏
  • 举报
回复
引用 12 楼 sinservice 的回复:
[quote=引用 5 楼 stormier 的回复:] [quote=引用 2 楼 modyaj 的回复:] a是个指针 指向一个函数 该函数的参数是0个 返回值是int的类型 至于怎么用 网上搜一下 函数指针和指针函数 彻底弄懂他们了就简单了 给个地址 http://www.programfan.com/blog/article.asp?id=6030
同上。 比如我自己写一个也行。 typedef int (*a)(); int b() {return 1;} a c=b; c(); 绝对错误[/quote] 绝对正确。 [/quote] 你试过么就胡说八道。(*c)()才对。不懂就别说。OK?!
stormier 2013-12-19
  • 打赏
  • 举报
回复
引用 20 楼 a345485527 的回复:
[quote=引用 5 楼 stormier 的回复:] [quote=引用 2 楼 modyaj 的回复:] a是个指针 指向一个函数 该函数的参数是0个 返回值是int的类型 至于怎么用 网上搜一下 函数指针和指针函数 彻底弄懂他们了就简单了 给个地址 http://www.programfan.com/blog/article.asp?id=6030
同上。 比如我自己写一个也行。 typedef int (*a)(); int b() {return 1;} a c=b; c(); 绝对错误[/quote] 没有错误[/quote] 有错。(*c)()才对。不懂就别说。
风行踩火轮 2013-12-19
  • 打赏
  • 举报
回复
使用的时候采用回调函数的方式
风行踩火轮 2013-12-19
  • 打赏
  • 举报
回复
a就是一个函数指针
jiandingzhe 2013-12-19
  • 打赏
  • 举报
回复
定义了一个类型a,类型为函数指针,对应的函数没有参数,返回int。
大奶兔白糖 2013-12-18
  • 打赏
  • 举报
回复
引用 5 楼 stormier 的回复:
[quote=引用 2 楼 modyaj 的回复:] a是个指针 指向一个函数 该函数的参数是0个 返回值是int的类型 至于怎么用 网上搜一下 函数指针和指针函数 彻底弄懂他们了就简单了 给个地址 http://www.programfan.com/blog/article.asp?id=6030
同上。 比如我自己写一个也行。 typedef int (*a)(); int b() {return 1;} a c=b; c(); 绝对错误[/quote] 什么错误?
大奶兔白糖 2013-12-18
  • 打赏
  • 举报
回复
引用 7 楼 stormier 的回复:
[quote=引用 6 楼 bijiaoben 的回复:] [quote=引用 5 楼 stormier 的回复:] [quote=引用 2 楼 modyaj 的回复:] a是个指针 指向一个函数 该函数的参数是0个 返回值是int的类型 至于怎么用 网上搜一下 函数指针和指针函数 彻底弄懂他们了就简单了 给个地址 http://www.programfan.com/blog/article.asp?id=6030
同上。 比如我自己写一个也行。 typedef int (*a)(); int b() {return 1;} a c=b; c(); 绝对错误[/quote] (*c)()[/quote] 如果是函数指针,不需要(*c)() 只要c()[/quote] Sorry,游戏更新出错,正在纠结中
加载更多回复(7)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧