在《C Programming Language》的字符指针那一节里,有这一段代码和注释:
*p++ = val; /* push val onto stack */
val = *–p; /* pop top of stack into val */
第一句是入栈的过程,先*p=val,然后p++。第二句不太理解了,按照代码,应该是–p之后,再把新地址的值赋给val。但是按照注释的说法,是把栈顶元素弹出栈并赋给val,然后栈指针才减1, 这也是符合出栈的过程的。
到底这一段代码有没有错误,还是本人理解错了,请高手指点一下~~
*p++ = val; /* push val onto stack */
val = *–p; /* pop top of stack into val */
第一句是入栈的过程,先*p=val,然后p++。第二句不太理解了,按照代码,应该是–p之后,再把新地址的值赋给val。但是按照注释的说法,是把栈顶元素弹出栈并赋给val,然后栈指针才减1, 这也是符合出栈的过程的。
到底这一段代码有没有错误,还是本人理解错了,请高手指点一下~~
解决方案
10
看不出有这个说法
60
栈顶指针一般都是指向栈顶元素的下一个位置。
所以要取栈顶元素,需要让栈顶指针先减1再取值才行。(所以这样注释完全OK)
PS:谁也没说过栈顶指针一定要指着栈顶元素啊?
所以要取栈顶元素,需要让栈顶指针先减1再取值才行。(所以这样注释完全OK)
PS:谁也没说过栈顶指针一定要指着栈顶元素啊?