指针作为函数的返回值

一个函数可以返回整型数据、字符数据、浮点型的数据,也可以返回一个指针.

例 30:
char * fun()
{
char str[100]="hello world";
return str;
}
int main()
{
char *p;
p=fun();
printf("%s\n",p);//
}

C语言函数和指针的关系之二(未完)_数据

//总结:返回地址的时候,地址指向的内存的内容不能释放

如果返回的指针指向的内容已经被释放了,返回这个地址,也没有意义了。

例 31:返回静态局部数组的地址

char * fun(
{
static char str[100]="hello world";
return str;
}
int main()
{
char *p;
p=fun();
printf("%s\n",p);//hello world
}
原因是,静态数组的内容,在函数结束后,亦然存在。

C语言函数和指针的关系之二(未完)_数组_02

例 32:返回文字常量区的字符串的地址

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

C语言函数和指针的关系之二(未完)_常量区_03

原因是文字常量区的内容,一直存在。

例 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);
}

C语言函数和指针的关系之二(未完)_数组_04

原因是堆区的内容一直存在,直到 free 才释放。 总结:返回的地址,地址指向的内存的内容得存在,返回的地址才有意义。