指针作为函数的返回值
一个函数可以返回整型数据、字符数据、浮点型的数据,也可以返回一个指针.
例 30:
char * fun()
{
char str[100]="hello world";
return str;
}
int main()
{
char *p;
p=fun();
printf("%s\n",p);//
}
//总结:返回地址的时候,地址指向的内存的内容不能释放
如果返回的指针指向的内容已经被释放了,返回这个地址,也没有意义了。
例 31:返回静态局部数组的地址
char * fun(
{
static char str[100]="hello world";
return str;
}
int main()
{
char *p;
p=fun();
printf("%s\n",p);//hello world
}
原因是,静态数组的内容,在函数结束后,亦然存在。
例 32:返回文字常量区的字符串的地址
char * fun()
{
char *str="hello world";
return str;
}
int main()
{
char *p;
p=fun();
printf("%s\n",p);//hello world
}
原因是文字常量区的内容,一直存在。
例 33:返回堆内存的地址
char * fun()
{
char *str;
str=(char *)malloc(100);
strcpy(str,"hello world");
return str;
}
int main()
{
char *p;
p=fun();
printf("%s\n",p);//hello world
free(p);
}
原因是堆区的内容一直存在,直到 free 才释放。 总结:返回的地址,地址指向的内存的内容得存在,返回的地址才有意义。