表达式必须具有指针类型

发布于 2024-11-01 00:06:00 字数 378 浏览 3 评论 0原文

我有一个问题,程序给出了类似“表达式必须有指针类型”的错误。你能帮我吗?

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

I have a problem,the program gives an error like "expression must have pointer type".Can you help me ?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

凡间太子 2024-11-08 00:06:00
  • 您将类型 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;
    }
  • You're mixing the type struct stack with the variable top
  • Your top variable isn't a pointer, you can't change what it points at.
  • c_data isn't a pointer, so don't assign NULL to it.
  • You're not using the passed newptr for anything useful - it should be a local variable,.

This may work better:

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;
    }
静谧 2024-11-08 00:06:00
newptr->next = top
top = newptr

请记住,如果 x 被声明为 T*,那么 x 就是指针,*x 就是 T。这确实不难理解。您想要分配指针,而不是覆盖指针指向的位置。

newptr->next = top
top = newptr

Remember, if x is declared T*, then x is the pointer, and *x is T. This is really not hard to understand. You want to assign the pointer, not overwrite where the pointer points.

灯角 2024-11-08 00:06:00

看看你的“结构堆栈”,这就是结构的描述。
顶部的下一个循环是您的结构的一个实例。您似乎将两者混合在一起。
任何地方都不应该有任何“struct top”,它们应该是“struct stack”。

Look at your 'struct stack', thats the description of the structure.
Next loop at top, that's an instance of your structure. You appear to be mixing the both.
There shouldn't be any 'struct top' anywhere, they should be 'struct stack'.

痴情 2024-11-08 00:06:00

你有几个问题。第一个是您使用的是类型 top 而不是变量 newptr

另外,您可能希望在传入变量时使用 **newptr。

You have several problems. The 1st is you are using the type top rather than the variable newptr.

Also you might want to be using **newptr when passing the variable in.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文