【发布时间】:2014-01-09 05:02:51
【问题描述】:
要了解函数指针,我正在关注this 教程 这里给出这个例子来说明函数指针的用途:
#include<stdio.h>
#include<string.h>
int func(char *s)
{
printf("Callback recieved : %s",s);
return 0;
}
float divide(unsigned int a, unsigned int b, int(*status_callback)(char*))
{
status_callback("\n Recieved values...validating\n");
if(b == 0)
{
status_callback("\n b = 0 detected, aborting....\n");
return -1;
}
status_callback("\n Validation complete, performing division\n");
float ret = a/b;
status_callback("\n Division complete, returning value\n");
return ret;
}
int main(void)
{
int(*func_ptr)(char*);
unsigned int a = 6, b = 3;
printf("\n This is a prgram to find a/b\n");
func_ptr = func;
float ret = divide(a,b,func_ptr);
printf("\n divide returned [%f]\n",ret);
return 0;
}
这里根据作者的说法,函数“divide()”可以被认为是一个库函数。
上面的输出:
This is a prgram to find a/b
Callback recieved :
Recieved values...validating
Callback recieved :
Validation complete, performing division
Callback recieved :
Division complete, returning value
divide returned [2.000000]
现在我无法理解这里解释的函数指针的基本原理。而且我的以下代码也将解决相同的目的(通知应用程序库级别发生的事情):
#include<stdio.h>
#include<string.h>
float divide(unsigned int a, unsigned int b)
{
printf("\n Recieved values...validating\n");
if(b == 0)
{
printf("\n b = 0 detected, aborting....\n");
return -1;
}
printf("\n Validation complete, performing division\n");
float ret = a/b;
printf("\n Division complete, returning value\n");
return ret;
}
int main(void)
{
// int(*func_ptr)(char*);
unsigned int a = 6, b = 3;
printf("\n This is a prgram to find a/b\n");
// func_ptr = func;
float ret = divide(a,b);
printf("\n divide returned [%f]\n",ret);
return 0;
上面的输出是:
root@ubuntu:/home/# ./a.out
This is a prgram to find a/b
Recieved values...validating
Validation complete, performing division
Division complete, returning value
divide returned [2.000000]
使用 printf 语句可以解决相同的目的。那么为什么要使用函数指针呢?
【问题讨论】:
-
不要以
root运行普通程序。不好的做法。
标签: c pointers callback function-pointers