指针作为函数的返回值
一个函数可以返回整型数据、字符数据、浮点型的数据,也可以返回一个指针.
例 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 才释放。 总结:返回的地址,地址指向的内存的内容得存在,返回的地址才有意义。