| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2317 人关注过本帖
标题:一个形参为指针传递的问题
取消只看楼主 加入收藏
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
结帖率:92.86%
收藏
已结贴  问题点数:20 回复次数:5 
一个形参为指针传递的问题
int StackPop(SequenceStack *S, LPBTreeNode *p)
{
    if (S->top <= 0)
    {
        printf("堆栈已空无数据元素出栈!\n");
        return 0;
    }
    else
    {
        S->top--;
        p = &(S->stack[S->top]);
        return 1;
    }
}
这是其中一个函数,运用栈堆来处理非递归遍历的,LPBTreeNode是二叉树类型,我想问一下,原本传进来的P是空值,然后我利用p = &(S->stack[S->top]); 我调式在这里面p也拿到了栈顶的地址,但是为什么回到调用函数里面p却还是空了,求大神指引
搜索更多相关主题的帖子: 形参 指针 传递 top  
2018-11-03 10:55
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
收藏
得分:0 
调用 StackPop的函数
void npreOrder(LBinaryTreeNode *root)//先序遍历
{
    SequenceStack s;
    LPBTreeNode *p = root;
    StackInitiate(&s);
    while (StackNotEmpty(s) || p)
    {
        if (p)
        {
            visit(p);
            StackPush(&s, *p);
            p = leftchild(p);
        }
        else
        {
            StackPop(&s, p);
            p = rightchild(p);
        }
    }
}
2018-11-03 10:56
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
收藏
得分:0 
下面是我另外一种写法,是成功的,我在困惑为什么我第一种p会是空值
LPBTreeNode* StackPop(SequenceStack *S, LPBTreeNode *p)
{
    if (S->top <= 0)
    {
        printf("堆栈已空无数据元素出栈!\n");
        return NULL;
    }
    else
    {
        S->top--;
        p = &(S->stack[S->top]);
        return p;
    }
}
void npreOrder(LBinaryTreeNode *root)//先序遍历
{
    SequenceStack s;
    LPBTreeNode *p = root;
    StackInitiate(&s);
    while (StackNotEmpty(s) || p)
    {
        if (p)
        {
            visit(p);
            StackPush(&s, *p);
            p = leftchild(p);
        }
        else
        {
            p=StackPop(&s, p);
            p = rightchild(p);
        }
    }
}
将StackPop的函数返回类型修改,p就得到栈顶的地址了,但是这跟我第一种好像没什么不同啊,&是可以取地址的啊
2018-11-03 11:05
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
收藏
得分:0 
我把上面的问题简化了,
#include<stdio.h>
#include<stdlib.h>
void text(int *s,int *p)
{
    p = s;
}
int main()
{
    int *p,*s;
    int i = 1; int j = 2;
    p = &i; s = &j;
    text(s,p);
    printf("%d",*p);
    system("pause");
        return 0;
}
这个编译是输出1的,但是我对于这个的理解是,我调用text函数,就是要把s的地址赋给p,然后输出2的,但是却还是输出1,为什么呢?
2018-11-03 12:26
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
收藏
得分:0 
回复 6楼 幻紫灵心
那我知道怎么改了 谢谢,我还要去百度一下二重指针,加深理解和它的应用
2018-11-03 12:47
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
收藏
得分:0 
回复 7楼 幻紫灵心
问一下,这两个数值互换,我用二级指针操作,应该怎么操作
void swap3(int *p1,int *p2) //起初我以为可以的
{   int *t;
    t=p1; p1=p2; p2=t;
}
void main()
{  int a,b;  
   int  *p_1, *p_2;
   scanf("%d,%d",&a,&b);
   p_1=&a; p_2=&b;  
   if (a<b)  swap3(p_1,p_2);
   printf("max=%d,min=%d\n",a,b);
}
2018-11-03 13:09
快速回复:一个形参为指针传递的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033657 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved