| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 381 人关注过本帖
标题:帮忙找下错误!!
只看楼主 加入收藏
GKL932939348
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:21
专家分:9
注 册:2013-11-5
结帖率:85.71%
收藏
已结贴  问题点数:6 回复次数:6 
帮忙找下错误!!
#include "stdio.h"
#define NULL 0
struct student
{
    int num;
    float score;
    struct student *next;
};
struct student *body()
{
    struct student a,b,c,*head;
    a.num=1;
    a.score=89.5;
    b.num=2;
    b.score=90;
    c.num=3;
    c.score=78.5;
    head->next=&a;
    a.next=&b;
    b.next=&c;
    c.next=NULL;
    return(head);
}
void main()
{
    struct student *head, *p;
    head=body();
    p=head->next;
    while(p!=NULL)
    {   
        printf("%d %.2f\n",p->num,p->score);
        p=p->next;
        
    }
}
搜索更多相关主题的帖子: include return 
2014-01-17 15:03
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:1 
head->next=&a;  // 这句前面要先给head分配空间.
2014-01-17 15:07
GKL932939348
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:21
专家分:9
注 册:2013-11-5
收藏
得分:0 
试过 还是不行

2014-01-17 15:09
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:1 
struct student a,b,c // 你子函数里面定义的a, b, c 也赋值了, 但是函数调用结束以后, a, b, c的内存被释放了,
要么你把a, b, c用动态分配内存., 要么用全局变量.
2014-01-17 15:22
GKL932939348
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:21
专家分:9
注 册:2013-11-5
收藏
得分:0 
我是按《C 语言程序设计》(谭浩强)书的例题敲得 只是多了一个函数调用。郁闷啊!
2014-01-17 15:25
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:4 
回复 5楼 GKL932939348
函数调用结束以后会释放内存,
除非你定义为全局变量, 或者动态分配内存, 还有就是静态存储.
如: static struct student a, b, c, *head;
但是head指针使用之前要确定它的指向.
程序代码:
#include "stdio.h"
#include <stdlib.h>   // malloc()的头文件
struct student
{
    int num;
    float score;
    struct student *next;
};

struct student *body()
{
    static struct student a, b, c, *head;  // 声明为静态变量,
    a.num=1;
    a.score=89.5;
    b.num=2;
    b.score=90;
    c.num=3;
    c.score=78.5;
    head = malloc(sizeof(struct student));  // 给head分配内存
    if (head == NULL)
        exit(1);
    head->next=&a;
    a.next=&b;
    b.next=&c;
    c.next=NULL;
    return(head);
}
void main()
{
    struct student *head1, *p;  // 因为存在另外一个head指针, 所以这里改了下名字
    head1=body();
    p=head1->next;
    while(p!=NULL)
    {   
        printf("%d %.2f\n",p->num,p->score);
        p=p->next;
       
    }
    free(head);              // 释放内存
} 

2014-01-17 15:39
GKL932939348
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:21
专家分:9
注 册:2013-11-5
收藏
得分:0 
谢谢了!
2014-01-17 16:42
快速回复:帮忙找下错误!!
数据加载中...
 
   



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

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