指针作为函数的返回值(C语言)

291 阅读1分钟

在C语言中,一个函数可以返回整形数据、字符数据、浮点型的数据,同时也可以返回一个指针类型的数据。 但是,值得注意:函数的返回值为一个指针类型的数据,即返回一个地址时,地址指向的内容不能够被释放,如果返回的指针指向的内容已经被释放了,返回这个地址也就没意义了。

## 1、返回字符数组(程序有问题)

#include <stdio.h>

char *fun() {
    char str[100] = "hello world";
    return str; //报警告:Address of stack memory associated with local variable 'str' returned
}

int main() {
    char *p;
    p = fun();
    printf("p=%s\n", p);
    return 0;
}

2、返回静态局部数组的地址

#include <stdio.h>

char *fun() {
    static char str[100] = "hello world"; //用static修饰返回内容
    return str;
}

int main() {
    char *p;
    p = fun();
    printf("p=%s\n", p);
    return 0;
}

3、返回文字常量区的字符串的地址

#include <stdio.h>

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

int main() {
    char *p;
    p = fun();
    printf("p=%s\n", p);
    return 0;
}

4、返回堆内存的地址

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *fun() {
    char *str;
    str = (char *)malloc(100);
    strcpy_s(str,100,"hello world");
    return str;
}

int main() {
    char *p;
    p = fun();
    printf("p=%s\n", p);
    free(p); //释放申请的内存资源
    return 0;
}