I am implementing a small program to exercise with double pointers This is the main program:
#include <stdio.h>
#include "serial.h"
#include "stack.h"
int main(void) {
serial_init();
/* Array to hold stack entries */
int stack[10]={0};
/* Stack pointer */
int *stack_p = stack;
/* Code to call the functions */
push(&stack_p, 1);
push(&stack_p, 2);
push(&stack_p, 3);
push(&stack_p, 4);
printf("popped value: %d\r\n", pop(&stack_p));
printf("popped value: %d\r\n", pop(&stack_p));
printf("popped value: %d\r\n", pop(&stack_p));
printf("popped value: %d\r\n", pop(&stack_p));
}
void push(int **sp, int value) {
/* Implement it */
}
int pop(int **sp) {
/* Implement it */
}
I have implemented the push function it seems ok. However, the pop return back just the last element and then 10
void push(int **sp, int value) {
/* implemented it*/
int *pt;
pt=&value; // Store the value to the pointer
printf("Push value is is %d\r\n", *pt);
sp = &pt; // associate the pointer to the pointer of pointer
++(*pt);
}
int pop(int **sp) {
/* implemented it */
int value;
int *pt;
pt=&value;
sp = &pt;
*pt--;
return value;
}
Your push and pop functions are overly complicated and totally wrong:
You want this:
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
}
Your wrong code for push with explanations in comments:
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
}
By the way: the initialisation to zero of the whole stack is not necessary, although it might help during the debugging process. So you can write the declaration of the stack like this:
int stack[10]; // no initialisation necessary
Exercise for you:
Explain the exact reason why it is not necessary to initialize all elements of the stack to zero.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.