重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C语言指向函数的指针承载的信息比较复杂,组织起来要素要写全。根据指向函数的指针的书写语法,下面的代码就是一个返回函数指针的函数:int (*f(void))(int){//f是函数,没有参数,返回指向一个函数的指针;这个被指向的函数有一个int型形参,且返回一个int值 return fun;//fun是个函数名,必须具备一个int形参、返回int值的要求}以下代码可以验证上述函数的正确性:pre t="code" l="cpp"//#include "stdafx.h"//If the vc++6.0, with this line.
成都创新互联公司专业为企业提供开平网站建设、开平做网站、开平网站设计、开平网站制作等企业网站建设、网页设计与制作、开平企业网站模板建站服务,十多年开平做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
#include "stdio.h"
int fun(int n){
printf("abcdef\n");
return n;
}
int (*f(void))(int){
return fun;
}
int main(void){
printf("%d\n",f()(100));//调用函数f,通过f返回的指针用100调用函数fun
return 0;
}输出是:abcdef100
你询问的是“C语言中指针类型可以返回-1”的问题吗?是可以返回值为-1的地址的。
C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数。所以其意义是指向地址为“-1”的变量值索引。
需要注意的是,用指针作为函数返回值时需要注意的一点是,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针请尽量不要指向这些数据,C语言没有任何机制来保证这些数据会一直有效,它们在后续使用过程中可能会引发运行时错误。
这种方式叫做“用指针函数*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);//释放动态内存
}