c语言函数指针作返回值 c返回指针的函数

c语言中如何用返回函数指针举个两个整数加法c语言函数指针作返回值的例子,希望对你有帮助:
#include stdio.h#include conio.h
//声明指向函数的指针类型fpAddc语言函数指针作返回值,该类型的函数,有两个整数作为参数,返回值是一个整数 。
//其他类型的函数指针声明方式类似,即c语言函数指针作返回值:typedef 函数返回值类型 (*函数指针类型名称)(函数参数列表);
typedef int (*fpAdd)(int a,int b);
//声明两个和fpAdd类型一致的函数
int AddTest(int a,int b);
int AddTestAdd5(int a,int b);
//声明两个返回函数指针的函数
fpAdd GetAddFun();
fpAdd GetAdd5Fun();
void main()
{
int a = 1;
int b = 2;
int sum;
//取得指向函数(AddTest)的指针
fpAdd add = GetAddFun();
//取得指向函数(AddTestAdd5)的指针
fpAdd add5 = GetAdd5Fun();
//通过函数指针调用函数 。
sum = add(a,b);
//输出结果
printf("a+b=%d\n",sum);
sum = add5(a,b);
//输出结果
printf("a+b=%d\n",sum);
getch();}
int AddTest(int a,int b)
{
return a+b;
}
int AddTestAdd5(int a,int b)
{
return a+b+5;
}
fpAdd GetAddFun()
{
return AddTest;
}
fpAdd GetAdd5Fun()
{
return AddTestAdd5;
}
C语言指针作函数参数时的返回问题首先,弄懂函数参数都是靠值传递 。指针也是 。
进入函数后,函数创建几个空间给形参,再把实参数值拷过来 。退出函数时,把形参空间释放 , 则影响不到实参 。这就是值传递 。
swap(int *p1,int *p2)函数首先创建两个空间,是指针,再把实参复制过来,即p1=pointer_1=a,p2=pointer_2=b,改变p1,p2就分别指向了a,b.改变p1指向的值就是改变了a 。然后交换*p1,*p2,ab就互换了 。函数退出,释放p1,p2所占的内存空间 。但是a,b值互换了 。swap函数没有改变实参pointer_1,pointer_2的内容,只是借助指针实现了巧妙的乾坤大挪移 。
学到c++后有个引用例外 , 那是后话了 。
++++++++++++++++++++++华丽丽的分割线+++++++++++++++++++++
其实很简单 , 不要硬记规律 , 要理解了 。
第二个例子中swap(int x,int y)没有改变原来实参a,b的值
第一个例子中swap(int *p1,int *p2)也没有改变原来两个实参pointer_1,pointer_2的值,他们值分别是是a,b地址,但pointer_1,2指向的内容改变了,改的是以pointer_1,pointer_2的值为地址的内存单元的值 。
C语言指针与返回值函数A的返回值错误 。虽然地址和指针很像 , 但还是不同的两个东西 。而且,一旦出了函数A , 返回的地址,也就该被回收,会导致程序出错 。是非常危险的行为 。
举个例子说明下吧 。
int *p=a;
这个,在数值上,p是和a的地址相等的,也就是有p==a 。
这时如果a=1;那么你知道*p==1,是真 。
但是此时,p存储的是a的地址,p还有自己本身的地址 。就好比,你(p)坐在座位上 , 用手指向另一个座位(a)一样 。那个座位就是a的地址,上面坐着谁(1),就是a的值 。你本身就是指针了 。
所以说,返回值是指针和地址是完全不同的两个概念 。所以就是错误的!
B函数为啥正确呢?因为NULL是一种特殊的指针,叫空指针 。所以是可以算作正确的 。
C语言怎么让一个函数返回指针这种方式叫做“用指针函数*creat()的返回值来传递动态内存”,这是一个C语法
首先你要注意,子函数*creat()用了malloc动态申请内存,而return返回的是指针变量所指向的地址 , 而不是指针!相当于将你所申请的动态内存返回给主函数

推荐阅读