今天写了好些废代码,实现逻辑太烂了。现在头晕乎乎得。感觉有点累,这两天新学了点东西,来看看想得起点什么。

首先在csdn看见了一个问题,往数组里面存储多于数组长度的数据会怎样,那位同学总结来总结去,好像没有总结出根源问题。于是,我学了栈。

1、堆栈,的栈

函数执行时,局部变量和形参和返回地址都存在栈里面。

当调用函数,函数最后一个参数先被压入栈,直到第一个参数压入,然后是返回地址。递归是一个很好说明这个我问题的例子如下图。

  在图中,最下面的栈是最先调用的函数压入的,当调用新函数时,这些值是不可访问的。sp的值初始为-1,在移到下一个栈时,总是先加一在操作栈,这样可以使sp总是指向最后的一个地址。

当数组被存到栈里面,已经为他分配好了空间,数组存储时,由低内存地址,顺序存到高内存地址,如果超过数组长度存储,就有可能改变上一个函数的参数,返回地址,于是会导致函数错误。

数组最后一位时0 结尾,所以一个长度为4的整形数组,其内存大小其实时5 字节。

原文地址:https://www.cnblogs.com/dosu/p/12052099.html