我不理解,
如果说栈中有四个元素,
例如 'a' 'b' 'c' 'd'
但push进四个元素后,
m_itop++;
最终m_itop=4.
那么执行pop
m_itop--, 则m_itop = 3.
elem = m_pBuffer[m-itop];
//说明elem代表了栈顶元素
//但是,m_itop=3,不仍旧代表栈中有四个元素吗。
嗯, 补充
m_itop=0;
这个程序了里m_itop指向的是下一个入栈位置,m_itop = 3说明0,1,2位置有元素,3位置没有。是三个元素,不是四个。
开始执行push完成之后,像代码里面注释写的一样,m_itop指向的是下一次再入栈时要放入数据的位置,实际上这个位置上目前是没有数据的(例如你举得例子,abcd 只用到 m_pbuffer【1-3】)。而pop出栈的时候,此时记录的m_itop值需要将这个虚位置剔除,得到真正的栈顶的位置。你说的m_itop=3确实是代表栈中有4个元素,但m_itop始终指向的是栈顶元素的下一个位置。