免费注册 查看新帖 |

Chinaunix

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

几个函数指针问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-11-19 19:08 |只看该作者
回复 10# pmerofc
整数溢出呢?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
12 [报告]
发表于 2011-11-19 19:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
13 [报告]
发表于 2011-11-19 19:41 |只看该作者
回复 1# nanjingnew4
typedef int (*compare)(const void *x, const void *y);
的含义是:用“compare”这个单词来作为类型 “int (*)(const void *, const void*)” 的等价(简写)形式。也就是说compare是一个类型,而不是别的什么(比如你可能会以为的:函数指针)。
所以你代码中的 void my_sort(void *data, int length, int size, compare){ ... ... } 是错误的,因为你在定义(而不是声明)函数时,没有提供“形参”,只是提供了形参的类型(compare)。
所以正确的做法是 void my_sort(void *data, int length, int size, compare comp_fun){ ... ... },或者你不提供 typedef int (*compare)(const void *x, const void *y);
那么你就应该这样干:void my_sort(void *data, int length, int size, int (*comp_fun)(const void*, const void*)){ ... ... }。个人理解,仅供参考。

论坛徽章:
0
14 [报告]
发表于 2011-11-19 21:32 |只看该作者
回复 9# digdeep126

你说的是对的
我没考虑到溢出这个问题
我只是看到 那个结构
就直接想当然优化了一下

论坛徽章:
0
15 [报告]
发表于 2011-11-19 21:37 |只看该作者
回复 10# pmerofc


    P哥说的是对的
我也没考虑到 类型问题
这个是一个错误

论坛徽章:
0
16 [报告]
发表于 2011-11-20 12:34 |只看该作者

论坛徽章:
0
17 [报告]
发表于 2011-11-21 19:42 |只看该作者
不知到我上面的解释你明白了么?让你看typedef,你最好弄明白这个操作符的意思再继续。
samzc2010 发表于 2011-11-19 15:50



谢谢。。大致看懂了,还有个问题想问下你,在main函数里
int main(int argc, char **argv){

        int arr={2,4,3,656,23};

// 你这里对函数的使用,传递进去的恰恰就是my_compare这个函数的地址,也就是说传递了一个compare类型的函数地址给my_sort函数

        my_sort(arr, 5, sizeof(int), my_compare);

        //do something

        return 0;
}

my_sort(arr, 5, sizeof(int), my_compare);具体传参时是不是要写出my_compare(void *,void *)(void *,void *)
也就是说把他的返回指针指向的函数形参也写上

论坛徽章:
0
18 [报告]
发表于 2011-11-21 19:44 |只看该作者
回复 13# digdeep126


    恩,懂了,谢谢。。能不能再帮我看下楼上提出来的那个问题

论坛徽章:
0
19 [报告]
发表于 2011-11-21 20:00 |只看该作者
不用。难道你调用函数 int putchar(int c); 时需要这样写:putchar( (int)'\n'); 吗???

论坛徽章:
0
20 [报告]
发表于 2011-11-21 20:04 |只看该作者
回复 19# digdeep126


    不是,我的意思是

my_sort(arr, 5, sizeof(int), my_compare(a,b)(c,d));
要把a,b,c,d4个参数都带上
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP