Ваши функции push и pop слишком сложны и совершенно неправильны:
Вы хотите это:
void push(int **sp, int value) {
**sp = value; // put value onto top of the stack
(*sp)++; // increment stack pointer
}
int pop(int **sp) {
(*sp)--; // decrement stack pointer
return **sp; // return value which is on nthe op of the stack
}
Ваш неправильный код для push с пояснениями в комментариях:
void push(int **sp, int value) {
int *pt;
pt=&value; // here you put the pointer to the local variable value
// into pt, but local variables disappear as soon
// as the function has finished
// the printf is the only thing one more or less correct
// but you could just print directly 'value' like this:
// printf("Pushed value is %d\r\n", value);
//
printf("Push value is is %d\r\n", *pt);
sp = &pt; // this only assigns the pointer to the local variable pt to
// the local variable sp
++(*pt); // here you increment actually the local variable
// value which is pointless
}
Кстати: инициализация нуля всего стека не требуется, хотя это может помочь в процессе отладки.Таким образом, вы можете написать объявление стека следующим образом:
int stack[10]; // no initialisation necessary
Упражнение для вас:
Объясните точную причину, по которой нет необходимости инициализировать все элементыстека в ноль.