int Pop_SeqStack(PSeqStack S,int *x)
{
if(Empty_SeqStack(S))
return 0;
else
{
*x=S->data[S->top];
S->top--;
return 1;
}
}
int Push_SeqStack(PSeqStack S,int x)
{
if(Empty_SeqStack(S))
return 0;
else
{
S->top++;
S->data[S->top]=x;
return 1;
}
}
这两个是栈的入栈和出栈代码,为啥出栈需要传入指针*x,能告诉我什么时候该传入指针吗
在这两个栈的入栈和出栈代码中,Pop_SeqStack函数需要传入指向int类型变量的指针x,而Push_SeqStack函数只需要传入int类型的值x。
这是因为在出栈操作时,我们需要将出栈的元素值传递回给调用函数,所以需要传入指向int类型变量的指针作为参数,以便在函数内部修改调用函数中的变量值。这样可以将出栈的元素值保存在传入的指针x指向的内存地址中。
而在入栈操作时,我们只需要将元素值压入栈中,不需要传递任何返回值给调用函数,所以直接将元素值x作为参数传递给函数即可。
在一般情况下,我们传入指针的场景包括:
函数需要修改调用函数中的变量值,而不是只读取变量值。
需要传递多个值给函数,并且返回多个结果。
要传递指向数组、结构体等复杂数据结构的指针。
当函数需要修改调用函数中的变量值时,通常会考虑使用指针作为参数。当函数只需要读取变量值或只需要传递单个值给函数时,直接将值作为参数传递即可,无需使用指针。
在使用指针时,要确保传入的指针不为NULL,以避免出现潜在的空指针异常。同时,也要注意指针所指向的内存是否合法,避免出现野指针的问题。
出栈时,需要通过形参 int *x 返回栈顶元素值给调用出栈函数的地方的变量。
入栈时,形参int x 只需值传递就可达元素入栈目的。
Pop_SeqStack 通过传参的方式获取出栈元素的值,然后参数只是一份拷贝,仅仅传变量进去的话是没法获取到栈里面的内容,因此只能以传入变量地址(即指针)的方式才能正确获取。
不知道你这个问题是否已经解决, 如果还没有解决的话:栈的出栈操作中需要传入指针 *x,是因为栈是一个后进先出的数据结构,我们需要将出栈的元素值返回给调用者。由于C语言中函数的参数传递是通过值传递的方式,即函数内部对参数的修改不会影响到外部的变量。如果我们只是传入一个变量而不是指针,出栈操作无法将出栈的元素值传递给调用者。
对于何时应该传入指针作为参数,一般有以下几种情况:
需要在函数内部修改传入的变量的值:如果函数需要改变传入的变量的值,而不仅仅是修改副本,那么需要传入指针。通过指针传递变量的地址,函数可以直接修改原变量的值。
需要返回多个值:如果函数需要返回多个值,可以通过传入指针参数,让函数将返回值保存在指针指向的地址中。
需要动态分配内存:如果函数中需要动态分配内存,并将分配的内存传递给调用者使用,可以通过传入指针参数,在函数内部分配内存,并将指针赋值给传入的指针变量。
在这个问题中,出栈操作需要返回出栈的元素值,因此需要传入指针 *x,在函数内部将出栈的元素值存储到指针指向的地址中,以便在函数外部使用。而入栈操作不需要返回任何值,只需要将元素值存储到栈中即可,因此直接传入元素值 x 作为参数即可。