C语言学习【19】-静态变量跨函数调用【我懵逼了,谁能给我讲讲】
直接上代码
输出结果为:
懵逼的原因:
背景为静态变量当然是不能跨函数调用的啊,因为静态变量的内存在函数执行完就释放了啊,除非这个变量在主函数内。
那么再看上面的程序
f 函数形参为二重指针,这里将 指针变量 p 的地址发送给该函数,然后将 f 函数中的整形变量 i 的地址赋给了 p ,f 函数调用完成后,i 的内存空间也给释放掉了,但是输出 *p 依然能够输出,我很疑惑。
带着这种疑惑我又写了个程序
这里我将 f 函数的形参写成了 一维指针,此时将指针变量传递给形参,编译没有错,输出有错误,结果如下
上网查了一下这个错误
呵呵,编译器这才知道原来访问到不属于自己,早干什么去了。但是这情况不是偶然,不管在gcc上,在早期的VC6.0还是在VS2019上都出现这种情况,前者不报错正常出值;后者软件直接崩溃,gcc给一个这样的错误。我想这个问题自有其特殊性,所以才有疑问。
看来二维指针有风险,但是我还是不清楚第一个程序没有报错正确显示的具体原因,希望大佬能够给点提示。