左边不是一个指针吗?那*x不是是x指针指向的值。两者为什么类型相等?
int Pop(SeqStack * S, StackElementType *x)
{ if(S->top==-1) /*栈为空*/
return(FALSE);
else
{*x= S->elem[S->top];
S->top--; /* 修改栈顶指针 */
return(TRUE);
}
}
*x 在这里被称为取地址符,它是一个操作符,用于获取指针指向的地址的值。
在这个代码片段中,S->elem[S->top] 是一个栈的顶部元素的值,而 *x 则是一个指针变量,它指向一个存储该元素的位置。
用这种方式取出顶部元素的值,并将其赋值给 x,因此在函数的结尾,x 的值将是函数弹出的栈顶部元素的值。
请注意,用这种方式获取值仅适用于指针变量。
该回答引用ChatGPT
在 C 语言中,左边的 *x 表示指向某个内存位置的指针的值,而右边的 S->elem[S->top] 是一个普通的变量。这两个东西类型相同是因为它们都是数组元素的类型,在这个函数中,它们的类型是 StackElementType。
这个函数的作用是从顺序栈中弹出一个元素,并通过指针参数 x 将这个元素的值返回给调用者。因此,代码中的语句 *x = S->elem[S->top] 就是将栈顶元素的值存储到指针 x 所指向的内存位置。