我有一个问题,程序给出了一个错误,比如“表达式必须有指针类型”。你能帮助我吗?
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;
}
答案 0 :(得分:2)
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;
}
答案 1 :(得分:0)
newptr->next = top
top = newptr
请记住,如果x被声明为T *,则x是指针,而* x是T.这真的不难理解。您想要指定指针,而不是覆盖指针指向的位置。
答案 2 :(得分:0)
查看你的'struct stack',即结构的描述。 顶部的下一个循环,这是您的结构的一个实例。你似乎在混合两者。 在任何地方都不应该有任何'struct top',它们应该是'struct stack'。
答案 3 :(得分:0)
你有几个问题。第一个是您使用的是top
类型而不是变量newptr
。
此外,您可能希望在传递变量时使用** newptr。