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出来

  • 相关阅读:
    Centos搭建SVN服务器
    JavaScript 对象 之创建对象 学习笔记
    ThinkPHP 学习记录
    Git 版本控制 在 WIN 下的一些使用方法
    关于 CSS 的重用性
    双飞翼布局和圣杯布局
    cocos2dx3.8 ios打包脚本编写
    如何做dragonbones的lua绑定(xcode)
    【转】如何做dragonbones的lua绑定(Android)
    【转】如何做dragonbones的lua绑定(VisualStudio)
  • 原文地址:https://www.cnblogs.com/oldfish123/p/13627100.html
Copyright © 2011-2022 走看看