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

posted @ 2020-09-07 15:19  雾漫大武汉  阅读(211)  评论(0编辑  收藏  举报