C语言学习【19】-静态变量跨函数调用【我懵逼了,谁能给我讲讲】

直接上代码

C语言学习【19】-静态变量跨函数调用【我懵逼了,谁能给我讲讲】

输出结果为:

C语言学习【19】-静态变量跨函数调用【我懵逼了,谁能给我讲讲】

懵逼的原因:

背景为静态变量当然是不能跨函数调用的啊,因为静态变量的内存在函数执行完就释放了啊,除非这个变量在主函数内。

那么再看上面的程序

f 函数形参为二重指针,这里将 指针变量 p 的地址发送给该函数,然后将 f 函数中的整形变量 i 的地址赋给了 p ,f 函数调用完成后,i 的内存空间也给释放掉了,但是输出 *p 依然能够输出,我很疑惑。

带着这种疑惑我又写了个程序

C语言学习【19】-静态变量跨函数调用【我懵逼了,谁能给我讲讲】

这里我将 f 函数的形参写成了 一维指针,此时将指针变量传递给形参,编译没有错,输出有错误,结果如下

C语言学习【19】-静态变量跨函数调用【我懵逼了,谁能给我讲讲】

上网查了一下这个错误

C语言学习【19】-静态变量跨函数调用【我懵逼了,谁能给我讲讲】

呵呵,编译器这才知道原来访问到不属于自己,早干什么去了。但是这情况不是偶然,不管在gcc上,在早期的VC6.0还是在VS2019上都出现这种情况,前者不报错正常出值;后者软件直接崩溃,gcc给一个这样的错误。我想这个问题自有其特殊性,所以才有疑问。

看来二维指针有风险,但是我还是不清楚第一个程序没有报错正确显示的具体原因,希望大佬能够给点提示。