带指针返回的字符串函数
char *strlong(char *str1, char *str2)
{
if(strlen(str1) >= strlen(str2))
{
return str1;
}
else
{
return str2;
}
}
函数
char *sp=NULL;
char str1[30], str2[30];
gets(str1);
gets(str2);
sp=strlong(str1,str2);
printf("%s\r\n",sp);
调用该函数则功能为输入两行字符串,比较其长度,返回较长字符串的指针。并显示输出。
注意,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针请尽量不要指向这些数据。
int *func(){
int n = 100;
return &n;
}
*如此定义函数是 n 是 func() 内部的局部变量,func() 返回了指向 n 的指针,func() 运行结束后 n 将被销毁,使用 *p 应该获取不到 n 的值。*前面我们说函数运行结束后会销毁所有的局部数据,这个观点正确。但是,这里所谓的销毁并不是将局部数据所占用的内存全部抹掉,而是程序放弃对它的使用权限,弃之不理,后面的代码可以随意使用这块内存。对于上面的两个例子,func() 运行结束后 n 的内存依然保持原样,值还是 100,如果使用及时也能够得到正确的数据,如果有其它函数被调用就会覆盖这块内存,得到的数据就失去了意义。
int *func(int *y1,int ch1)
{
y1=&ch1;
return y1;
}
int *y11=NULL;
int *gg=func(y11,888);
int a=100;
int *b=&a;
int *c=b;
则a b c 都为100