在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;
}