順序棧長度計算。
今天在學習順序棧的時候,使用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);
}
}

浙公網安備 33010602011771號