社区
C语言
帖子详情
请问float (*op[4])(float a,float b)是什么意思?
bngfcy
2004-07-27 07:58:56
声明:
float (*op[4])(float a,float b);
代表的是什么意思呢?
...全文
367
6
打赏
收藏
请问float (*op[4])(float a,float b)是什么意思?
声明: float (*op[4])(float a,float b); 代表的是什么意思呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bngfcy
2004-07-27
打赏
举报
回复
谢谢啦!
plusKid
2004-07-27
打赏
举报
回复
大家都对C语言那种只有编译器才喜欢的声明语法感到头痛,其实其中是有规律的。
只要按照声明的优先级一步一步的分析就可以了。
C语言的声明的优先级规则如下:
---------------------------------------------------------------
A 声明从它的名字开始读取,然后按照优先级顺序依次读取
B 优先级从高到低依次是:
B.1 声明中被括号括起来的那一部分
B.2 后缀操作符【圆括号()表示这是一个函数,方括号[]表
示这是一个数组】
B.3 前缀操作符【*表示这是一个指向……的指针】
C 如果const或volatile关键字的后面紧跟说明符【如int、long等】,
那么它作用于类型说明符。在其他情况下,const和【或】volatile
关键字作用于它左边紧邻的指针星号。
----------------------------------------------------------------
下面看一个例子:
char * const *(*next)();
-------- ------------------------------------------------------
运用规则 解释
-------- ------------------------------------------------------
A 首先,看变量名“next”,并注意到它直接被括号括住
B.1 先把括号里面的东西看成一个整体,得出“next是一个指向……
的指针”
B 然后考虑括号外面的东西,在星号前缀和括号后缀之间做出选择
B.2 B.2规则告诉我们优先级较高的是右边的函数括号,所以得出“next
是一个函数指针,指向一个返回……的函数”
B.3 然后,处理前缀“*”,得出指针所指的内容
C 最后,把“char* const”解释为指向字符的常量指针
-------- ------------------------------------------------------
经过上述分析,得出“next是一个指针,它指向一个函数,该函数返回另外一个
指针,该指针【函数返回的】指向一个类型为char的常量指针”。
千万不要嫌麻烦,习惯了之后就会很自然地看出各种声明了,例如你问的那个:
float (*op[4])(float a,float b);
用上面的步骤,可以得出“op是个含有四个元素的数组,它的元素的类型是指针,
该指针是函数指针,该函数接受两个float参数,并返回float。”
其实,运用上面的规则,可以很容易地编写出一个分析C语言声明的小程序,这里
有一个现成的可以用,它把C语言的声明翻译成英语【不要嫌代码太乱,已经稍微
整理了一下,毕竟这是国际C语言混乱代码大赛的获奖作品嘛。^_^】:
cdecl.c
------------------------------------------------------------------
#include<stdio.h>
#include<ctype.h>
#define w printf
#define p while
#define t(s) (W = T(s))
char *X,*B,*L,I[99];
M,W,V;
D()
{
W == 9?(w("'%.*s'is ",V,X),t(0)):W == 40?(t(0),D(),t(41)):W == 42?(t(0),D(),w("ptr to ")):0;
p(W == 40?(t(0),w("func returning "),t(41)):W == 91?(t(0) == 32?(w("array[0..%d] of ",atoi(X)-1),t(0)):w("array of "),t(93)):0);
}
main()
{
p(w("input: "),B = gets(I))if(t(0) == 9)L = X,M = V,t(0),D(),w("%.*s.\n\n",M,L);
}
T(s)
{
if(!s || s == W)
{
p(*B == 9 || *B == 32)B++;
X = B;
V = 0;
if(W = isalpha(*B)?9:isdigit(*B)?32:*B++)if(W < 32)p(isalnum(*B))B++,V++;
}
return W;
}
------------------------------------------------------------------
以上内容整理自《Expert C Programming》
这是本不错的书哟,建议没有看过的人去弄来看一下。
yangsongx
2004-07-27
打赏
举报
回复
声明是正确的
jimychen
2004-07-27
打赏
举报
回复
指向函数的指针数组!!
boyszz
2004-07-27
打赏
举报
回复
这个声明正确吗?我有点怀疑
plusKid
2004-07-27
打赏
举报
回复
next是一个指针,它指向一个函数,该函数返回另外一个指针,该指针【函数返回的】指向一个类型为char的常量指针。
作业五-设计一个程序计算输入的两个数的和与差,要求自定义一个函数 sum_diff(
float
op
1,
float
op
2,
float
*psum,
float
*pdiff),其中
op
1 和 ...
#include<stdio.h> int main(void) { void sum_diff(
float
op
1,
float
op
2,
float
*psum,
float
*pdiff);
float
psum,pdiff;
float
op
1,
op
2; //输入
op
1,
op
2,并且是
float
,所以用%f; pri...
6-1 计算两数的和与差 (8 分)本题要求实现一个计算输入的两数的和与差的简单函数。函数接口定义:void sum_diff(
float
op
1,
float
op
2,
float
*ps
6-1 计算两数的和与差 (8 分) 本题要求实现一个计算输入的两数的和与差的简单函数。 函数接口定义: void sum_diff(
float
op
1,
float
op
2,
float
*psum,
float
*pdiff ); 其中
op
1和
op
2是输入的两个实数,*psum和*pdiff是计算得出的和与差。 裁判测试程序样例: #include
void sum_diff(
float
op
1,
float
op
2,
float
*psum,
float
*pdiff )
练习8-2 计算两数的和与差 (10 分)
本题要求实现一个计算输入的两数的和与差的简单函数。 函数接口定义: void sum_diff(
float
op
1,
float
op
2,
float
*psum,
float
*pdiff ); 其中
op
1和
op
2是输入的两个实数,*psum和*pdiff是计算得出的和与差。 裁判测试程序样例: #include <stdio.h> void sum_diff(
float
op
1,
float
op
2,
float
*psum,
float
*pdiff ); int m
0011
/*6-1 计算两数的和与差 (10 分) 本题要求实现一个计算输入的两数的和与差的简单函数。 函数接口定义: void sum_diff(
float
op
1,
float
op
2,
float
*psum,
float
*pdiff ); 其中
op
1和
op
2是输入的两个实数,*psum和*pdiff是计算得出的和与差。 裁判测试程序样例:*/ #include <stdio.h>...
调用函数求两个数的和与差(C语言)
调用函数求两个数的和与差:要求自定义一个函数sum_diff(
float
op
1,
float
op
2,
float
*psum,
float
*pdiff)。从主函数输入两个实数,调用函数sum_diff求两实数的和与差,然后在主程序中输出结果。 #include<stdio.h> void sum_diff(
float
op
1,
float
op
2,
float
*psum,
float
*pdiff) { *psum=
op
1+
op
2; *pdiff=
op
1-
op
2; } int main(.
C语言
70,009
社区成员
243,256
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章