重温C语言系列之二(函数的返回值)

关于这个问题,大家应该在很多书上看到过:

1.函数的返回值不可以是局部变量;

2.函数内的局部变量在函数调用完成之后自动销毁,因为局部变量是存放于栈空间内的;

 

 理论很明确,但是实际应用中还是有一些疑惑的。先找几个常见的例子一步一步深入说明。

 

这个运行结果是什么? 按照上面的理论,我们返回一个局部变量,这个局部变量在函数调用完成后已被自动销毁,那返回值应该是乱值才对。但实际上运行结果是正确的。为什么?

      这个地方我曾经也很迷惑。因为有一个概念不清楚,所有不明白这什么这样可以。我们返回的是一个值 ,在返回值后我们将其赋给了变量C,相当于创建了一个副本,不论add()中的局部变量是否销毁都没有关系了。

      但是如果我们返回的是一个地址,指向局部变量的地址,就不行了。因为局部变量的地址在函数调用完成后销毁,我们返回的地址就指向的区域内就不是我们想要的值了,因为这块区域已是公共的,可被其它函数占用的,其内容是不定的。看如下例子:

 

在我的电脑上,编译时会提示warning message:

hello.c: In function ‘hello’:
hello.c:25: warning: function returns address of local variable

运行结果当然是一堆乱码了。

 

总结一句话:要时刻清楚你使用的指针指向哪里。

 

 

你可能感兴趣的:(C语言)