首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

问个函数指针的有关问题,帮忙解答上

2012-08-13 
问个函数指针的问题,大虾帮忙解答下。在书中看到个例题,里面有个函数调用是这个(int(*)(void*,void*))numcm

问个函数指针的问题,大虾帮忙解答下。
在书中看到个例题,里面有个函数调用是这个


(int(*)(void*,void*))numcmp

不太明白nucmp函数是怎么被转换为函数指针。

这也不是赋值,难道是numcmp的地址直接返回到前面的函数指针内?

哪位仁兄有关于这种传值的资料,共享下 嘿 谢谢了

[解决办法]
参考:
函数指针的几种用法
[解决办法]
函数调用和通过函数指针调用本质上一样的,所以你可以把numcmp看成一个函数指针。类型转换只是在调用检查上做了手脚。
[解决办法]

C/C++ code
# include <stdio.h># include <stdlib.h>int numcmp(int * a, int * b){    return *a - *b;}int main(){    int a[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, };    int i;    qsort(a, 10, sizeof(int), (int (*) (const void *, const void *))numcmp);    for (i = 0; i < 10; i++)        printf("%d\n", a[i]);    return 0;}
[解决办法]
是强制转换,int(*)(void*,void*)中:(void*,void*)是参数,int是返回类型,(*)是函数名。
[解决办法]
(int(*)(void*,void*))numcmp
这是一个强制类型转换,楼主是否能看明白这个语法?

关于转换过程,其实说起来和编译器有关系了
numcmp()是一个函数,函数名在编译器看来就是一段代码的入口
这个所谓的入口就是一个地址,就是说程序从什么地方开始执行
这个地址,从C语言的角度来讲,就是一个指针(指针就是一个地址)
因此,函数名numcmp就是一个指针
上面的这段代码的意思,就是对一个指针进行了强制类型转换
关键问题,就是在于函数形式参数的类型上,void使得编译器不再进行检查
这种强转,是为了“照顾编译器的情绪”
一切责任就要由编码者负责了,必须保证代码能够合理的运行下去

不知道说到这里,楼主是否能明白了呢?

[解决办法]
探讨
引用:
C/C++ code


# include <stdio.h>
# include <stdlib.h>

int numcmp(int * a, int * b)
{
return *a - *b;
}

int main()
{
int a[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, };
int i;
………
关键这种转换的流程是怎么进行的呢

热点排行