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

  • 相关阅读:
    linux中的umask命令
    The meaning of the number displayed on the man page in Linux
    Runlevel in Linux
    C语言指针与指向指针的指针
    JS函数、变量作用域
    JS对象、数据类型区别、函数
    JavaScript基础
    DOM
    HTML色码表
    GIT
  • 原文地址:https://www.cnblogs.com/oldfish123/p/13627100.html
Copyright © 2011-2022 走看看