выражение должно иметь тип указателя - PullRequest
0 голосов
/ 10 апреля 2011

У меня проблема, программа выдает ошибку типа "выражение должно иметь тип указателя". Можете ли вы мне помочь?

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;
    }

Ответы [ 4 ]

2 голосов
/ 10 апреля 2011
  • Вы смешиваете тип struct stack с переменной top
  • Ваша переменная 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;
    }
0 голосов
/ 10 апреля 2011

У вас есть несколько проблем. Во-первых, вы используете тип top вместо переменной newptr.

Также вы можете захотеть использовать ** newptr при передаче переменной в.

0 голосов
/ 10 апреля 2011

Посмотрите на свой «структурный стек», вот описание структуры. Следующий цикл сверху, это экземпляр вашей структуры. Вы, кажется, смешиваете оба. Нигде не должно быть «struct top», это должен быть «struct stack».

0 голосов
/ 10 апреля 2011
newptr->next = top
top = newptr

Помните, что если x объявлен как T *, тогда x - это указатель, а * x - как T. Это действительно не сложно понять. Вы хотите назначить указатель, а не перезаписывать, куда указывает указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...