二手双桥自卸车出售:关于C语言指针的问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 06:08:01
在一个C程序中定义了三个结构体,它们是嵌套的,具体如下所示:
typedef struct position{
int x;int y;
}Position;
typedef struct{
int order;
Position seat;
Direction di;
}SElemType;
typedef struct{
SElemType *elem;
int top;
}Stack;
其中有一个出栈函数是这样的:
int Pop(Stack *S,SElemType *e){
if(S->top<=0) return ERROR;
*e=S->elem[--S->top];return OK;
}
我不明白的就是指针e的赋值方式,我认为S->elem[--S->top]是一个地址,所以直接在给e赋值时不该加*号,既e=S->elem[--S->top];但编译时这样改是错的,我不知为什么,谭浩强的C语言书上关于这点讲的不是很清楚,望哪位高手指点一二

S->elem[--s->top]不是一个地址,S->elem才是一个地址。S->elem[--s->top]相当于*(S->elem+(--s->top)),是已经将地址中的值取出,所以只能赋值给*e
p.s:
c中的[]可以用*运算符替代,即a[k]与*(a+k)等价。

举个例子说一下吧:
int *p,a[3],q;
q=a;
p=q+1与*p=q[1]是不一样的。
q[1]指的存储单元中的值。