zoukankan      html  css  js  c++  java
  • C指针函数中的局部变量返回

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

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

              eg:   int*  fun1(int n){}

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

    简单例子

    #include<stdio.h>
    #include <unistd.h>
    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=&sum; 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 是存储在数据段里面,(局部变量/参数/返回地址均存储在栈中,全局变量/常量/静态变量则存储在数据段中),所以栈被释放掉了,数段段依然存在(生命周期,伴随整个文件)。

    tianjiale菜鸟名企梦
  • 相关阅读:
    串口打印信息
    网上下的ARM入门笔记
    职业生涯规划之驱动开发笔试题
    哈佛学生是如何度过大学4年的
    9G忠告打基础
    新塘M0Timer定时器篇
    ARM裸机篇按键中断
    linux驱动面试题
    裸机程序循环加法操作
    ARM裸机篇串口UART实验
  • 原文地址:https://www.cnblogs.com/tianjiale/p/9924536.html
Copyright © 2011-2022 走看看