首先,说一下第一个问题,第一个不交换是因为定义的k是一个指针,指针说白了就是一个指向,我指向你,他指向她,然后换成我指向她,他指向你,你把他们指向的位置交换,而并没有交换他们地址里面存储的值,这样是并没有任何区别,在最后函数结束之后,函数的那些指针指向全部释放,和修改不修改没什么两样;定义的是一个整型变量,他把s
“专业、务实、高效、创新、把客户的事当成自己的事”是我们每一个人一直以来坚持追求的企业文化。 成都创新互联公司是您可以信赖的网站建设服务商、专业的互联网服务提供商! 专注于网站设计制作、做网站、软件开发、设计服务业务。我们始终坚持以客户需求为导向,结合用户体验与视觉传达,提供有针对性的项目解决方案,提供专业性的建议,创新互联建站将不断地超越自我,追逐市场,引领市场!
指针指向的地址里面的值与
t
指针指向的地址的值进行了交换,这样就修改了内存里面的值,即便是函数结束了也不会释放,自然就能做到交换了。
第二个问题,存储地址是会释放,但是释放的是函数内部定义的局部变量,现在你已经把s的地址通过return
返回回来并且存在
主函数的
r
中了,所以自然就不会释放了
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
1.返回函数里面局部变量的地址,而函数结束后,该地址就释放掉了,所以在函数外访问、修改该地址都是非法的,结果不可知
2.指针为野指针,然后向野指针赋值(*ptr=10),非法访问,结果不可知,容易崩溃,切函数返回的也是野指针
3.函数内申请动态内存空间,函数结束,该内存空间不会释放,函数返回该内存空间地址,外部可以使用,但外部需要手动释放该空间(free(动态内存空间地址))
通过指针从函数返回一个数组
换句话说,返回的并不是数组,而是数组的首地址!
#include stdio.h
int * fun( ) //返回类型int *,与return a中的a的类型相同才可以!
{
static int a[]={1,2,3}; //静态变量,函数结束后,不会被系统回收
return a; //返回数组名,即数组首地址
}
int main()
{
int *p=fun(); //定义整型指针p接收返回地址
int i;
for( i=0;i3;i++ ) //遍历返回的地址中的数据!
printf("%d ", p[i] );
printf("\n");
return 0;
}
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款