请问 对于指向函数的指针,前面的括号(int (*)(void*,void*))代表什么呢?谢谢

qsort((void**) lineptr, 0, nlines-1,
(int (*)(void*,void*))(numeric ? numcmp : strcmp));

int (*FunctionName)(void*,void*)

这是一个叫FunctionName 的函数指针类型。 而去掉名字的结果就是个无名的函数指针类型
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-22
函数指针变量
在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。
函数指针变量定义的一般形式为:
类型说明符 (*指针变量名)();
其中“类型说明符”表示被指函数的返回值的类型。“(* 指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。
例如:
int (*pf)();
表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。
【例】本例用来说明用指针形式实现对函数调用的方法。
int max(int a,int b){
if(a>b)return a;
else return b;
}
main(){
int max(int a,int b);
int(*pmax)();
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);
printf("maxmum=%d",z);
}

从上述程序可以看出用,函数指针变量形式调用函数的步骤如下:
1) 先定义函数指针变量,如后一程序中第9行 int (*pmax)();定义 pmax为函数指针变量。
2) 把被调函数的入口地址(函数名)赋予该函数指针变量,如程序中第11行 pmax=max;
3) 用函数指针变量形式调用函数,如程序第14行 z=(*pmax)(x,y);
4) 调用函数的一般形式为:
(*指针变量名) (实参表)
使用函数指针变量还应注意以下两点:
a) 函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。
b) 函数调用中"(*指针变量名)"的两边的括号不可少,其中的*不应该理解为求值运算,在此处它只是一种表示符号。

指针型函数
前面我们介绍过,所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
定义指针型函数的一般形式为:
类型说明符 *函数名(形参表)
{
…… /*函数体*/
}
其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。
如:
int *ap(int x,int y)
{
...... /*函数体*/
}
表示ap是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。
【例】本程序是通过指针函数,输入一个1~7之间的整数,输出对应的星期名。
main(){
int i;
char *day_name(int n);
printf("input Day No:\n");
scanf("%d",&i);
if(i<0) exit(1);
printf("Day No:%2d-->%s\n",i,day_name(i));
}
char *day_name(int n){
static char *name[]={ "Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"};
return((n<1||n>7) ? name[0] : name[n]);
}

本例中定义了一个指针型函数day_name,它的返回值指向一个字符串。该函数中定义了一个静态指针数组name。name数组初始化赋值为八个字符串,分别表示各个星期名及出错提示。形参n表示与星期名所对应的整数。在主函数中,把输入的整数i作为实参,在printf语句中调用day_name函数并把i值传送给形参n。day_name函数中的return语句包含一个条件表达式,n值若大于7或小于1则把name[0]指针返回主函数输出出错提示字符串“Illegal day”。否则返回主函数输出对应的星期名。主函数中的第7行是个条件语句,其语义是,如输入为负数(i<0)则中止程序运行退出程序。exit是一个库函数,exit(1)表示发生错误后退出程序,exit(0)表示正常退出。
应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别。如int(*p)()和int *p()是两个完全不同的量。
int (*p)()是一个变量说明,说明p是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p)的两边的括号不能少。
int *p()则不是变量说明而是函数说明,说明p是一个指针型函数,其返回值是一个指向整型量的指针,*p两边没有括号。作为函数说明,在括号内最好写入形式参数,这样便于与变量说明区别。
对于指针型函数定义,int *p()只是函数头部分,一般还应该有函数体部分。

...前面的括号(int (*)(void*,void*))代表什么呢?谢谢
int (*FunctionName)(void*,void*)这是一个叫FunctionName 的函数指针类型。 而去掉名字的结果就是个无名的函数指针类型

void*(*)(void*)何解?
参数void*(*)(void*)是一个函数指针,前面的void为返回值类型,后面的void*为参数类型。指向函数的指针变量的一般定义形式为:数据类型(*指针变量名)(函数参数列表)函数名是可以缺省的,作为参数传递的时候会去调和void*(*)(void*)这个类型相匹配的函数的。例如:int func(int x); \/* 声明...

c++中的void是什么意思?
void是空的意思,一般用来表示无参数或者无返回。比如在函数定义的时候可以 用 void func(void);前面的表示函数无返回,括号里表示函数无参数。或者void *可以表示无类型指针,允许被强制转化成任意类型指针。

C语言 指针函数 函数指针 什么区别联系?最好有例子?一定采纳
指针分为三种类型:对象指针,函数指针和void指针。函数指针的声明形式是T (*p)(...),其中*p使用括号括起来的原因是函数类型解析的优先级高于指针的解析,故使用括号防止解析成上面的指针函数(其实这两个之间就相差了一对括号)。函数指针可以绑定到与其返回值和参数类型都相同的函数上。比如:int foo...

函数指针定义
int (*f) (int x); \/* 声明一个函数指针 *\/ f=func; \/* 将func函数的首地址赋给指针f *\/ 或者使用下面的方法将函数地址赋给函数指针:f = &func;赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。注2:函数括号...

C语言 自定义函数声明时候前面有个*什么意思?调用时候怎么调用?
这说明这个函数会返回一个指针。看具体操作了。比如有这个函数 char * function(int,int);我们可以这么调用 char ch[10];ch = function(..);括号里面填参数。当然我这里是返回的一个char 型指针,那么他返回了一个什么型的指针,你就用个什么型的变量地址去接收他 ...

一个指针函数,看不懂,void *(*p)(void)
函数的定义第一个单词表示函数的返回值类型,如果是void的话,就表示不需要返回值,单如果是void*的话,就表示返回值类型是无类型的指针, 也就是说,在函数中要返回一个void*的指针给调用方。

c语言中的void 表示什么意思?
中文翻译为"无类型"。又名“空函数”常用在程序编写中对定义函数的参数类型、返回值、函数中指针类型进行声明。void的字面意思是"无类型",void *则为"无类型指针",void *可以指向任何类型的数据。

C语言中两个*是什么意思?比如int**p
2 个*号,声明指向指针的指针。它的意思是“它是一个整数,这个整数指向某个内存地址,一次访问sizeof(int)长度,其值是一个整数,那个整数值指向某个内存地址,一次访问sizeof(BTree)长度。指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、...

void是什么意思 char *dd()是什么意思
前面这个 void 不能省,因为 函数类型 默认 是 int 型,不写类型 是 int 型。main(){ } -- 是 int main() { };--- char *dd(); 表示函数类型 是 char* 型, 函数返回值是 char型指针。dd 是函数名,无参数。--- int dd() 表示函数类型 是 int 型, 函数返回值是 ...

相似回答