实例:你们认为这三个函数能正瑺返回吗
先来理解一下函数返回值的原理func1的实现流程,main函数变量x,y复制到函数func1的栈上a,b此时,定义了一个局部变量c把a+b的值赋值给c,return c的时候会把局部变量c的值赋值到一个系统自动生成和管理的临时变量c`上并把局部变量c的值销毁,rec=func1(x,y);时rec=临时变量c`的值。所以可以正常返回
那麼同理对比func2和func3,有什么区别
区别在于char *str= "abs";“abs”字符串保存在程序的常量存储区,str指向这个变量当函数返回的时候,strTmp的临时变量里保存的是“abs”的地址,而“abs”的地址里是常量存储区所以可以正常返回。
而char str[] = "qwe";"qwe"虽然存储在常量存储区但str只是一个副本,所以函数返回时这个副夲的内容被销毁了而return的buf的临时变量就是这个副本的地址,里边的东西已经被干掉了所以不能正常返回。