酒煮青梅392 2023-07-27 15:20 采纳率: 65.2%
浏览 8
已结题

关于#c语言#的问题:这两个是栈的入栈和出栈代码,为啥出栈需要传入指针*x,能告诉我什么时候该传入指针吗


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,能告诉我什么时候该传入指针吗

  • 写回答

4条回答 默认 最新

  • 我是一个小白. 2023-07-27 15:28
    关注

    在这两个栈的入栈和出栈代码中,Pop_SeqStack函数需要传入指向int类型变量的指针x,而Push_SeqStack函数只需要传入int类型的值x。

    这是因为在出栈操作时,我们需要将出栈的元素值传递回给调用函数,所以需要传入指向int类型变量的指针作为参数,以便在函数内部修改调用函数中的变量值。这样可以将出栈的元素值保存在传入的指针x指向的内存地址中。

    而在入栈操作时,我们只需要将元素值压入栈中,不需要传递任何返回值给调用函数,所以直接将元素值x作为参数传递给函数即可。

    在一般情况下,我们传入指针的场景包括:

    函数需要修改调用函数中的变量值,而不是只读取变量值。
    需要传递多个值给函数,并且返回多个结果。
    要传递指向数组、结构体等复杂数据结构的指针。
    当函数需要修改调用函数中的变量值时,通常会考虑使用指针作为参数。当函数只需要读取变量值或只需要传递单个值给函数时,直接将值作为参数传递即可,无需使用指针。

    在使用指针时,要确保传入的指针不为NULL,以避免出现潜在的空指针异常。同时,也要注意指针所指向的内存是否合法,避免出现野指针的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月9日
  • 已采纳回答 8月1日
  • 创建了问题 7月27日

悬赏问题

  • ¥20 求下下面这个数据结构代码
  • ¥15 路由器考试怎么办,有懂行的吗 ,eNSP
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来
  • ¥15 java 判断某个数 区间是否存在
  • ¥15 appium控制多个雷电模拟器问题
  • ¥15 C# iMobileDevice
  • ¥15 谁会做这个啊#ensp#Boson NetSim
  • ¥15 如何编写针对TPS6503320FRGE型号的电源管理芯片的编程代码?
  • ¥15 设计简单目录管理系统,要满足以下内容