两种方式,在某些环境下是等效的,但是个人建议使用m=(*p)(a)这种方式,表意明确
临猗ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
说是等效的原因是实际上函数名也只是一个地址而已
但是要注意的是,m=p(a)这样的写法【据说】某些编译器认为是错误的表达式,会导致编译错误(但是同时,如果lz看书比较仔细的话,可能会在经典书籍Pointers on C一书中见到说两种表示都是合理的[中文版P261],所以我之前强调了是"据说",事实上,我到今天所用过的所有C编译器都支持两种表示方式;但是我们再回到经典中的经典The C Programming Language中使用的函数指针都是m=(*p)(a)这种方式[5.11 指向函数的指针])
C语言中,函数调用的一般形式为:
函数名(实际参数表)
对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
#includestdio.h
int fun(int x, int y); // 函数声明,如果函数写在被调用处之前,可以不用声明
void main()
{
int a=1, b=2, c;
c = fun(a, b); // 函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值
}
// 自定义函数fun
int fun(int x, int y) // 函数首部
{ // {}中的语言为函数体
return xy ? x : y; // 返回x和y中较大的一个数
}
扩展资料
C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。
这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。其关系可表示如图。
图表示了两层嵌套的情形。其执行过程是:执行main函数中调用a函数的语句时,即转去执行a函数,在a函数中调用b 函数时,又转去执行b函数,b函数执行完毕返回a函数的断点继续执行,a函数执行完毕返回main函数的断点继续执行。
参考资料:函数调用_百度百科
其实,函数指针确实不是“指向函数的指针”
函数指针,就是函数指针,加不加*没有实际意义。
二楼的那个:
c=(*p)(a,b);
也可以写成
c=(****************************************************p)(a,b);
或者
c=p(a,b);
你说它指向什么?
PS,加*有特殊的用途,初学者就算了
#includestdio.h
int *d_bubblesort(int a[],int n)//数组长度为n的冒泡降序排序
{
int i,j;
int temp;
for(i=0;in;i++)
{
for(j=n-1;ji;j--)
{
if(a[j]a[j-1])
{
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
return a;
}
void main()
{
int i;
int *p=NULL;
int a[10]={6,5,4,1,2,3,9,8,7,10};
int *(*fun)(int*,int);
fun=d_bubblesort;
p=fun(a,10);
for(i=0;i10;i++)
{
printf("%d\t",p[i]);
}
}
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款