共5个回答0条评论
分享
C语言以下描述如何表示出来?
Gary
排序方式:被封时间
时间排序由新到旧
- 3 个点赞 👍
我们来一步步剥一下洋葱吧。先说答案:
int (*(*fp)(int, int))(int);
首先,他是个指针,所以:
*fp
然后,这个指针它指向一个函数,它的参数是
(int, int)
,且返回值也是一个指针:*(*fp)(int, int)
然后,这个返回的指针指向一个函数,这个函数参数是
int
,返回值也是int
:int (*(*fp)(int, int))(int);
剥洋葱结束。
最后,我们来简单写个程序测试一下:
int ff(int n) { return n; } int (*f(int x, int y))(int) { (void)x, (void)y; return &ff; } int func() { int (*(*fp)(int, int))(int) = &f; return fp(0, 0)(88); } int main() { return func(); }
可以看到成功返回 88:
成功返回 88 最后,人生苦短,请善用 typedef。
编辑于 2023-07-18 02:55・IP 属地北京查看全文>>
Timothy Liu - 2 个点赞 👍
typedef int(*fptr__i32__i32)(int); define fptr0 fptr_i32_i32 typedef fptr0(*fptr__fptr0__i32_i32)(int,int); define fptr1 fptr__fptr0__i32__i32 fptr1 funtion_pointer = NULL;
发布于 2023-06-28 17:35・IP 属地四川查看全文>>
bionukg - 1 个点赞 👍
在以下程序中,main函数体之中定义的函数指针ptrWhichFunction满足题主要求!
#include <iostream> //cin, cout, endl #include <cassert> //assert using std::cin; using std::cout; using std::endl; int square(int integer); //平方 int cube(int integer); //立方 int factorial(int integer); //阶乘 int (*whichFunction(int integer, int result))(int); //哪一个函数指针 int main() { int integer=0, result=0; //整数,计算结果 while(true) { cout<<"Enter two integers (e.g., 3 27): "; cin>>integer>>result; int (*(*ptrWhichFunction)(int, int))(int)=&whichFunction; //指向“哪一个函数指针”的指针 int (*ptrFunction)(int)=(*ptrWhichFunction)(integer, result); //指向“哪一个函数”的指针 if(ptrFunction!=0) assert(ptrFunction(integer)==result); else break; } return 0; } int square(int integer){ return integer*integer; } int cube(int integer){ return integer*integer*integer; } int factorial(int integer) { int result=1; while(integer>1) result*=integer--; return result; } int (*whichFunction(int integer, int result))(int) { int (*functions[])(int)={&square, &cube, &factorial}; //函数指针数组 const size_t length=sizeof(functions)/sizeof(functions[0]); //数组长度 const char* names[length]={"square", "cube", "factorial"}; //名称数组 int results[length]={square(integer), cube(integer), factorial(integer)}; //结果数组 for(size_t index=0; index<length; index++) if(result==results[index]) { cout<<names[index]<<" of "<<integer<<" is "<<result<<endl; return functions[index]; } return 0; }
执行结果截图如下:
发布于 2023-06-28 12:26・IP 属地辽宁查看全文>>
沙锅老师 - 1 个点赞 👍
写了一个
#include "stdio.h" /* 一个函数的指针 指向的函数的类型是有两个整形参数并且返回一个函数指针的函数 返回的函数指针指向有一个整形参数且返回整型数的函数。 */ typedef int f_type(int); typedef f_type* ff_type(int, int); int type_f(int a) { return a + 4; } f_type* type_ff(int a, int b) { return &type_f; } ff_type* ff_type_p = &type_ff; int main() { f_type* f_type_p = ff_type_p(12,11); printf("%d\n", f_type_p(123)); return 0; }
发布于 2023-06-28 14:48・IP 属地广东查看全文>>
嵌入式Linux - 0 个点赞 👍
查看全文>>
黄亮anthony