博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C指针函数中的局部变量返回
阅读量:6827 次
发布时间:2019-06-26

本文共 824 字,大约阅读时间需要 2 分钟。

所谓指针函数其实就是  :一个函数的返回值为指针

  指针函数定义:返回类型标识符*  函数名(形参列表){函数体}  

          eg:   int*  fun1(int n){}

指针函数和局部变量返回解析:

简单例子

#include
#include
int* fun1(int n);int main(void){ int n=100; int *p_sum=fun1(n);    printf("%d",*p_sum); //结果5050 sleep(1); printf("%d",*p_sum); //结果随机值 return 0;}int* fun1(int n){ int sum=0; int *p=∑ int i=0; for(i=1;i<=n;i++){ sum+=i; } return p;}

 

在window系统下编译器为DEV,返回结果为5050。

 ubuntu下,返回结果为一个随机地址。(操作系统不同)

下面从ubuntu,详细解析一下,加入sleep之后,为何值会发生改变(随机地址)。

 

1.fun1是一个指针函数,被调函数的变量 sum ,sum为局部变量,存储在栈中,经过主函数sleep(1)之后,系统会回收其他函数的栈空间,也就是fun1里面的栈空间,被释放掉了。

2.若防止sum被释放的,可以加上static  如 static int sum=0,因为static 是存储在数据段里面,(局部变量/参数/返回地址均存储在栈中,全局变量/常量/静态变量则存储在数据段中),所以栈被释放掉了,数段段依然存在(生命周期,伴随整个文件)。

 

转载于:https://www.cnblogs.com/tianjiale/p/9924536.html

你可能感兴趣的文章
MYSQL 注释的 3 方法
查看>>
C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩
查看>>
zookeeper项目使用几点小结
查看>>
杂物论第一 中华文明的根基
查看>>
c#中 枚举类型的使用(转)
查看>>
linux应用之tomcat的安装及配置(centos)
查看>>
bytes与str
查看>>
转:Socket原理与编程基础
查看>>
linux C 刚初始化后的一个变量在调用一个静态库中函数后被异常修改为乱码
查看>>
记录DHT网络主要功能步骤
查看>>
VS2010使用Qt库
查看>>
Python特殊语法--filter、map、reduce、lambda
查看>>
X-UA-Compatible设置兼容模式
查看>>
由买冰箱想到的
查看>>
Delete和Truncate的区别
查看>>
android WebView总结
查看>>
适配器模式
查看>>
【综述】(MIT博士)林达华老师-"概率模型与计算机视觉”
查看>>
数据库访问性能优化
查看>>
在线并使用数据库来推断在线
查看>>