C语言中的局部变量为何只能在函数中使用?必须要初始化吗?
网友解答: 局部变量为何只能在函数中使用? 不只是C语言, 就我所知的函数中的变量都是使用栈来保存的,栈结构的特点是先进后出,当函数执行结束返回后,其栈中所有数据均出栈,也就解释了为什么
局部变量为何只能在函数中使用?
不只是C语言, 就我所知的函数中的变量都是使用栈来保存的,栈结构的特点是先进后出,当函数执行结束返回后,其栈中所有数据均出栈,也就解释了为什么只能在函数中使用,因为函数执行完毕后,所拥有的局部变量便不存在了。
递归、死循环等操作会发生溢出也是这个道理,因为不停的向栈中压入数据,当超出栈的大小时,便发生了溢出。
是否必须初始化C语言并没有要求变量必须进行初始化操作,也就是说不进行初始化操作在编译上是没有错的,但还是建议声明变量时进行初始化。
因为声明变量时,其实也就是申请了一小段内存空间,变量所持有的就是该内存空间的地址,而C语言并不提供变量的初始化操作,内存空间之前很可能是被使用过的,声明变量后,变量的值就是该内存空间中存在的值, 而这个值是不确定的,很有可能会给后面的流程造成干扰。
所以,虽然并没有硬性要求对变量进行初始化操作,但还是建议声明变量时进行初始化。
网友解答:c中任何变量都有自己的作用域,变量只在自己的作用域内生效。在函数体内定义的变量只在该函数体内有效。变量可以不初始化,这个时候编译器赋给未初始化变量一个未定义的数值,这个数值随机的,由编译器决定,也可以理解为编译器帮你给这个变量初始化了,只是初始化的值不确定,这时候这个数值也是不可用的、也就是不可以把这个变量赋值给其他变量或常量,因为这个值不确定。