C语言中free函数的一些疑问

图片描述

这道题为什么是选C呢?free函数把s变量给释放了,那么传入的q也应该是跟着被释放吗?如果q释放了,那么输出应该是0啊(NULL的常量),为什么是1呢?

阅读 2.5k
1 个回答

首先,malloc已经将s的值改变了,s所存的已经是新空间的地址了。所以接下来对s的任何操作都不能影响main函数中的p。
由于是按值传参,那么,s其实也是一个形参,因为它代表的是地址。
free(s)只是将新申请的地址给free了,和原本的地址没有任何关系
最后输出1,是因为,q指向的是a的地址。所以,解引用的结果自然就是a的值也就是1。

最后!!!不要学这道题的例子,千万不要写void main这样的声明,会被笑话的。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏