//展示函数如何返回指针 //当指针为全局变量、静态变量或指向堆中的数据时,可以从函数中返回。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<memory.h> //方案一(错误): //返回一个指向局部变量的指针,当函数结束时,由于变量已被自动销毁, //这个指针所指向的地址的内容"未定义" char *fun_1() { char buffer[] = "Only works for simple strings"; return buffer; } //方案二(可选): //直接返回一个字符串常量指针,只适合简单的字符串 char *fun_2() { return "Only works for simple strings"; } //方案三(可选): //使用全局声明的变量;缺点是全局数组任何人都可以修改,大型缓冲区如果闲置不用非常浪费内存空间 char global_array[] = "Only works for simple strings"; char *fun_3() { return global_array; } //方案四(可选): //使用静态变量;缺点是大型缓冲区如果闲置不用非常浪费内存空间 char *fun_4() { static char buffer[] = "Only works for simple strings"; return buffer; } //方案五(正确但不推荐): //显示分配一些内存,返回堆中的数据 //缺点:非常容易忘记释放已分配的内存,从而导致"内存泄漏"