扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
举个两个整数加法的例子,希望对你有帮助:
创新互联建站专注于武江企业网站建设,响应式网站,成都商城网站开发。武江网站建设公司,为武江等地区提供建站服务。全流程按需定制设计,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务
#include stdio.h#include conio.h
//声明指向函数的指针类型fpAdd,该类型的函数,有两个整数作为参数,返回值是一个整数。
//其他类型的函数指针声明方式类似,即: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;
}
struct student *p, *q, *head;
这里head不就是 struct student 类型的指针么。
这种方式叫做“用指针函数*creat()的返回值来传递动态内存”,这是一个C语法
首先你要注意,子函数*creat()用了malloc动态申请内存,而return返回的是指针变量所指向的地址,而不是指针!相当于将你所申请的动态内存返回给主函数
int
*fun(void)//这里是指针函数
{
int
*p
=
(int
*)
malloc
(int);//动态申请内存//p在这里指向了一块合法内存的地址
return
p;
}
void
main(void)
{
int
*q
=
NULL;
q
=
fun();//fun()返回指针p所指向的地址,(指针p是在栈上创建的,所以*fun()函数运行完,指针所分配的内存被系统自动释放)这时q指向p,得到了malloc所申请到的内存
free(q);//释放动态内存
}
void定义过后的函数不是说它没有返回值,而是它返回的是个空,也就是null,可以加return
null,也可以不加。当你定义函数时看最后你需不需要用到这个函数最后的结果,如果不需要就可以给这个函数定义void,如果需要则相应的加上它的返回类型。每个函数在定义的时候都要加返回类型,不需要返回值则定义为void,记住null并不是代表它没有返回值,而是返回的是空,只有在java或者c#它们的构造函数才是唯一没有返回值的函数。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流