zoukankan      html  css  js  c++  java
  • c语言 函数返还数组的注意事项

    函数能够返还出处于常量池中的字符串常量,但是无法返还处于内存中的函数局部变量

    一.函数返还一个数组

    char *fun(){
        char a[]="hello";
        return a;
    }

    错误,在fun函数中,函数在内存中开拓一个存储“hello”这个字符串的空间,hello储存于内存当中,属auto变量,即随着函数的结束而结束自己的生命周期,故当调用完成fun函数后,hello的地址被销毁,函数是无法返还出hello的地址

    二.返还出一个static类型的地址

    char *fun(){
        static char a[]="hello";
        return a;
    }

    正确,内存中会专门开辟出一个存储hello的空间,hello是随着程序的结束而被释放的,其生命周期是整个源程序。故能够返还并接收到hello

    三.返还指向auto型数组的指针

    char *fun(){
        char a[]="hello";
        char *p=a;
        return p;
    }

    错误,道理同一,p指针指向的是一个auto的数组,其会随着函数的结束而被释放,故在执行完成fun以后,p所指向的hello的地址是不存在的,函数return出的值是无法被接受到的。

    四.返还指向常量池中数组的指针

    char *fun(){
        char *a="hello";
        return a;
    }

    正确,fun函数使指针a指向了一个存储于常量池中的字符串常量hello,而常量池中的常量因为不会发生内存泄露所以是不会被回收的,永远存在rom中,所以可以被成功的return出来

  • 相关阅读:
    微信带参数的小程序码生成并上传到七牛云(java)
    数据结构-数组和广义表-思维导图
    数据结构-串-思维导图
    数据结构-栈与队列-思维导图
    数据结构-线性表-思维导图
    python 拆分csv文件
    记录自己写js一个bug
    win10快捷键收藏
    重装系统win10最新版(完整版)
    formController的函数的基本作用
  • 原文地址:https://www.cnblogs.com/oldfish123/p/13627100.html
Copyright © 2011-2022 走看看