顺序栈长度计算。
作者:互联网
今天在学习顺序栈的时候,使用C语言编写它的求长函数时,每次压一个栈帧,top指针上移一次,我的栈的长度是5,当第五个栈帧进栈的时候,我的top指针在
return S->top-S->base;也就是下图这个情况,这个我从图上想着top指针应该是一个野指针了啊,因为我只分配了5个空间啊,他现在是指向第六个空间的啊。
所以此时我觉得S->top应该是个野指针,结果应该是随机的。长度不可以计算,但是发现最后的结果还是5,意思是top在第6个位置还是连续上第五个空间的。
然后拿数组测试下,发现其实都是可以正常运算的。一直在这里牛角尖了好久,在上厕所的时候时候突然想起以前看过的一篇博客,指针自加并不是单纯的相加,例如一个指针pa元素的地址是0x1000;pa++实际是0x1000+sizeof(pa的数据类型)汗,这就能解释为什么没有分配连续的地址但是指针在没有分配的地址还能保存连续的原因了。
#include <stdio.h>
int main(){
int arary[5] = {1,2,3,4,5};
int *a,*b;
int len;
a=b=arary;
for(int i=1;i<=10;i++){
a++;
len = a-b;
printf("第 %d 次len is %d\n",i,len);
}
}
标签:顺序,0x1000,int,top,pa,计算,长度,栈帧,指针 来源: https://www.cnblogs.com/cceattd/p/15979807.html