| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1740 人关注过本帖
标题:关于调用子函数的求助!拜托了!
只看楼主 加入收藏
RayTang
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2019-5-11
结帖率:100%
收藏
 问题点数:0 回复次数:6 
关于调用子函数的求助!拜托了!
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define true 1
#define false 0
typedef struct node
{
    int d;
    struct node *next;
}node;
/*创建有五个实际节点的单链表*/
void Creat(node *h)
{
    node *p,*t;
    int i;
    h=(node *)malloc(sizeof(node));
    h->next=NULL;
    p=h;
    for(i=0;i<5;i++) 
    {
        t=(node *)malloc(sizeof(node));
        t->next=NULL;
        printf("请输入一个要放入单链表的数字:");
        scanf("%d",&t->d);
        printf("\n") ;
        p->next=t;
        p=t;
    }
printf("\nFirst output h->next %p\n",h->next);  /*输出h->next的地址*/ 
} 
int main()
{
    node *h;
    Creat(h);
printf("\nSecond output h->next %p\n",h->next);         /*输出h->next的地址*/ 
        return 0;
}

请问为什么这个程序在执行完子函数Creat就终止了?
为什么没有执行主函数中的printf函数?
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 子函数 node int next printf 
2019-05-11 21:14
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
主函数中的printf函数使用的h没有初始化
图片附件: 游客没有浏览图片的权限,请 登录注册

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2019-05-11 21:59
RayTang
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2019-5-11
收藏
得分:0 
回复 2楼 不懂才问
虽然我还不知道如何改这个程序,但谢谢你的解答!
在子函数Creat中先用malloc函数生成了h,那h就有了值,不是不用初始化了吗?
(我也不知道自己哪里理解错了)
请你进一步解答,拜托了!


2019-05-11 22:50
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
h进入自定义函数后,地址被刷新覆盖,后面申请内存的操作是针对新地址做的行为
主函数的h任然是那个旧的地址,自定义函数Create没有对其申请内存,则h->next访问next不可行。

你可以试着将
    h=(node *)malloc(sizeof(node));
    h->next=NULL;
写到main函数中,Create(h)的前面,进了函数之后就不要改这个变量的地址了。

剑栈风樯各苦辛,别时冰雪到时春
2019-05-11 23:55
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
首先好好复习并深刻理解一下函数参数单向传值的意思。

打个比方,不一定合适,但有那么点意思,姑妄听之。
你就好像那个函数Create,你得到主函数没有初始化的参数,就好象你捡到一张实际上没有开户的空白存折。
接下来你企图自己填上个数字然后还想取出钱来,于是,
要么你的生活会崩溃;
要么银行会崩溃。
总之平静生活不会继续了----请注意你没有得到return value 0,那说明程序崩溃了,没有正常结束。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-05-12 08:04
RayTang
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2019-5-11
收藏
得分:0 
回复 4楼 林月儿
感谢版主!问题已解决。
2019-05-12 08:37
RayTang
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2019-5-11
收藏
得分:0 
回复 5楼 forever74
感谢forever74!讲的很形象。
2019-05-12 08:38
快速回复:关于调用子函数的求助!拜托了!
数据加载中...
 
   



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

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