* 返回指针的函数
- 返回本地变量的地址是危险的
- 返回全局变量或静态本地变量的地址是安全的
- 返回在函数内malloc的内存是安全的,但是容易造成问题
- 最好的做法是返回传入的指针
//返回本地变量的地址是危险的
#include<stdio.h>
int *f(void);
void g(void);
int main(){
int *p = f();
printf("*p=%d\n",*p);
g();
printf("*p=%d\n",*p);
return 0;
}
int * f(void){
int i=12;
printf("&i=%p\n",&i);
return &i;
}
void g(void){
int k =24;
printf("k=%d\n",k);
printf("&k=%p\n",&k);//k的地址与i的地址一致,
//在f()函数把i的地址返回给主函数后,
//又再次被分配
//*p接收i的地址
//所以*p的值在g()后 改变
}
&i=000000000062FE0C
*p=12
k=24
&k=000000000062FE0C
*p=24
tips
- 不要使用全局变量来在函数间传递参数和结果
- 尽量避免使用全局变量
- 丰田汽车的案子
- *使用全局变量和静态本地变量的函数是线程不安全的