У меня проблема, программа выдает ошибку типа "выражение должно иметь тип указателя". Можете ли вы мне помочь?
struct stack{ int i_data; char c_data; struct stack *next; }top; void push_i(struct top *newptr,int info){ newptr=(struct top*)malloc(sizeof(top)); if(newptr!=NULL){ top->c_data=NULL; newptr->i_data=info; newptr->next=*top; *top=newptr; }
struct stack
top
c_data
NULL
newptr
Это может работать лучше:
struct stack{ int i_data; char c_data; struct stack *next; }; ... struct stack * top = NULL; ... void push_i(int info){ struct stack * newptr=(struct stack*)malloc(sizeof(struct stack)); if(newptr!=NULL){ top->c_data=0; newptr->i_data=info; newptr->next=top; top=newptr; }
У вас есть несколько проблем. Во-первых, вы используете тип top вместо переменной newptr.
Также вы можете захотеть использовать ** newptr при передаче переменной в.
Посмотрите на свой «структурный стек», вот описание структуры. Следующий цикл сверху, это экземпляр вашей структуры. Вы, кажется, смешиваете оба. Нигде не должно быть «struct top», это должен быть «struct stack».
newptr->next = top top = newptr
Помните, что если x объявлен как T *, тогда x - это указатель, а * x - как T. Это действительно не сложно понять. Вы хотите назначить указатель, а не перезаписывать, куда указывает указатель.