C语言指向函数的指针承载的信息比较复杂,组织起来要素要写全。根据指向函数的指针的书写语法,下面的代码就是一个返回函数指针的函数:
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计、网站建设、新邱网络推广、小程序制作、新邱网络营销、新邱企业策划、新邱品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供新邱建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
int (*f(void))(int){//f是函数,没有参数,返回指向一个函数的指针;这个被指向的函数有一个int型形参,且返回一个int值
return fun;//fun是个函数名,必须具备一个int形参、返回int值的要求
}
以下代码可以验证上述函数的正确性:
//#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;
}
输出是:
abcdef
100
内存被释放,不一定马上被用作其他功能.
即使被使用, 也未必马上被修改值.
所以 输出结果为100是正常的. 只是概率性问题.
实际编程中为了稳定性 不应有此类操作.
首先,你不应该返回局部变量的指针,因为局部变量在离开函数后就会被销毁。如果你想这样返回一个数组的话,你应该malloc出一个数组来返回。
至于应该return什么,return
(malloc出来的那个指针)就可以了。
例如
int**
foo()
{
int
**p
=
(int
**)malloc(sizeof(int
*)*10);
...
...
...
return
p;
}
这个p指向一个内存段,这个内存段存有十个int*类型的元素。
首先,说一下第一个问题,第一个不交换是因为定义的k是一个指针,指针说白了就是一个指向,我指向你,他指向她,然后换成我指向她,他指向你,你把他们指向的位置交换,而并没有交换他们地址里面存储的值,这样是并没有任何区别,在最后函数结束之后,函数的那些指针指向全部释放,和修改不修改没什么两样;定义的是一个整型变量,他把s
指针指向的地址里面的值与
t
指针指向的地址的值进行了交换,这样就修改了内存里面的值,即便是函数结束了也不会释放,自然就能做到交换了。
第二个问题,存储地址是会释放,但是释放的是函数内部定义的局部变量,现在你已经把s的地址通过return
返回回来并且存在
主函数的
r
中了,所以自然就不会释放了