表达式必须有指针类型
问题描述:
我有一个问题,程序给出了一个像“表达式必须有指针类型”的错误。你能帮我吗?表达式必须有指针类型
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
- 你
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;
}
答
newptr->next = top
top = newptr
记住,如果x被宣布T *,则x是指针,* x是T.这实在是不难理解的。你想分配指针,而不是覆盖指针指向的地方。
答
看看你的'堆栈',这就是结构的描述。 下一个循环在顶部,这是你的结构的一个实例。你似乎在混合两者。 任何地方都不应该有'struct top',它们应该是'struct stack'。
答
你有几个问题。第一种是使用top
类型而不是变量newptr
。
另外你可能想在使用** newptr时传入变量。
这段代码有太多的错误。你为什么传递newptr呢?如果意图是返回分配的内存,那么它应该是**,并且函数中的newptr的所有实例都应该是* newptr,如果代码中的everyline被打破,那么这里就错了。 – Angelom 2011-04-10 10:20:49
您是否使用Visual Studio?你有没有在某个地方设置断点? – becko 2014-03-07 00:57:56