它是出于我的想法而不是本书,而是出于我自己的观点,所以为什么没有根据情况实施它呢?
由于代码长度,堆栈省略为空且已满
#include<stdio.h>
typedef struct stack{
int key[100];
int top;
}stack;
void init(stack* a){
int i;
for(i=0;i<100;i++){
a->key[i]=0;
}
a->top = 0;
}
void push(stack* a, int num){
a->key[a->top++] = num;
}
int pop(stack* a){
return a->key[a->top--];
}
int main(void){
stack a;
init(&a);
push(&a,10); push(&a,20); push(&a,30);
printf("%d ",pop(&a)); printf("%d ",pop(&a)); printf("%d ",pop(&a));
return 0;
}
我希望输出30 20 10,但实际输出是0 30 20
答案 0 :(得分:2)
您的代码实际上是这样做的:
extension PhoneNotificationViewController: PhoneNotificationHeaderViewDelegate {
func pushNotificationSwitchTapped() {
guard let phoneNotificationHeader = Bundle(for: type(of: self)).loadNibNamed("PhoneNotificationHeaderView", owner: self, options: nil)?.first as? PhoneNotificationHeaderView else {
return
}
if phoneNotificationHeader.pushSwitch.isOn{
//Disable Firebase from sending
Globals.sharedInstance.pushStatus = true
phoneNotificationHeader.pushSwitch.setOn(false, animated: true)
}else{
Globals.sharedInstance.pushStatus = false
phoneNotificationHeader.pushSwitch.setOn(true, animated: true)
}
self.refreshUI()
}
堆栈:push(&a, 10);
key[0] = 10
堆栈:push(&a, 20);
key[0] = 10 / key[1] = 20
堆栈:push(&a, 20);
因为在key[0] = 10 / key[1] = 20 / key[2] = 30
中带有a->key[a->top++] = num;
的部分在末尾递增。
因此,此时您的最高索引等于3。
但是,当您弹出函数时,应该执行a->top++
首先减少索引
--a->top
堆栈:pop(&a);
,您的最高索引现在等于2。
key[0] = 10 / key[1] = 20 / key[2] = 30
堆栈:pop(&a);
,top = 1,您的最高索引现在等于1。
key[0] = 10 / key[1] = 20
堆栈:pop(&a);
,您的最高索引现在等于0。
如果您想对i ++和++ i(或i--和--i)有更好的解释,请阅读What is the difference between int++ and ++int?。