免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: parco_cu
打印 上一主题 下一主题

[C] 任何函数其实只需要传一个结构指针参数? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-11-19 10:17 |只看该作者
原帖由 bladmin 于 2009-11-19 09:42 发表

比如像一个点的坐标,这样两个值使用的时候一定是一起出现的,这个时候肯定是要用结构的。但是有的时候整个程序不是就一个main 和 一个fun啊!这些参数从逻辑或者使用上并不是一定要出现在一起的啊,这样搞个 ...

结构体当然是逻辑关联的啊
但是,函数参数如果没有关联性,是不是说明函数设计就有问题?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
12 [报告]
发表于 2009-11-19 11:04 |只看该作者
楼主有兴趣的话可以看看 lambda(,\) 演算[1]。
该演算法的模型认为,任何量都可以看作只有一个参数的函数,包括常数。
比如邱奇数[2]就是一种表达自然数的方法。

[1] http://zh.wikipedia.org/zh-cn/Lambda_%E6%BC%94%E7%AE%97
[2] http://zh.wikipedia.org/zh-cn/%E9%82%B1%E5%A5%87%E6%95%B0

论坛徽章:
0
13 [报告]
发表于 2009-11-19 12:27 |只看该作者
原帖由 flw 于 2009-11-19 11:04 发表
楼主有兴趣的话可以看看 lambda(,\) 演算[1]。
该演算法的模型认为,任何量都可以看作只有一个参数的函数,包括常数。
比如邱奇数[2]就是一种表达自然数的方法。

[1] http://zh.wikipedia.org/zh-cn/Lam ...

不愧为flw老大!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2009-11-19 13:24 |只看该作者
比如你举的例子:

int get_my_time(int h, int m, int s);

可以看作是:

get_my_time 拥有一个参数 int h,返回一个类型为
int (*)(int, int)
的函数,

最终实现通过计算类似于 get_my_time(h)(m)(s) 这样的运算,来代替计算 get_my_time(h, m, s)。
这样所有的函数就都只有一个参数了。

C 由于语法糖不够用,做这些比较费事,这也是所有命令式语言的特点。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2009-11-19 13:28 |只看该作者
至于把 h,m,s 合并成一个结构体,再传递给 get_my_time,
可以把 struct 当作元组构造符来理解。

论坛徽章:
0
16 [报告]
发表于 2009-11-19 13:49 |只看该作者
我见过许多这种用法
在某种业务处理时,因为可以把业务写成结构体,然后每个函数都对此结构体操作即可

论坛徽章:
0
17 [报告]
发表于 2009-11-19 13:57 |只看该作者
原帖由 parco_cu 于 2009-11-18 21:54 发表
我的想法是,C语言里的任何函数其实只需要一个结构指针参数。

一个简单例子:

int get_my_time(int h, int m, int s);

可以替换成:

typedef struct
{
    int h;
    int m;
    int s;
} ti ...


OIOIC 就是这么做的

论坛徽章:
0
18 [报告]
发表于 2009-11-19 16:48 |只看该作者
main函数就不行

论坛徽章:
0
19 [报告]
发表于 2009-11-19 19:30 |只看该作者
用结构体麻烦啊 需要在头文件里面定义结构体

而且也不能传常量

写起程序起来复杂很多

论坛徽章:
0
20 [报告]
发表于 2009-11-19 21:53 |只看该作者
按照这套理论,其实函数并不需要传参,只需要强行堆栈就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP