c语言中的结构问题,求解答

img

st p[2];定义的数组结构包含两个结构,为何在调用函数时n大于2时,这个结果依然是5个值运算的结果。

虽然你越界了,但是数组越界可以取到地址,都有赋值,所以不存在崩溃的风险。
你的这个2作用不大哈,起码在ave函数里用不到,所以你的值和2无关。

img


你这里应该用括号括起来

其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。

img


上面图片里输入的 n 大于 2 时,调用函数 ave(p , n); 时,对数组 p[2] 的越界操作,会有系统崩溃的风险,你运行结果正确,只是碰运气的结果。