| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1300 人关注过本帖
标题:链表打印时出现地址
只看楼主 加入收藏
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:3 
链表打印时出现地址
请前辈指导,谢谢!
程序代码:
#include "stdio.h"
#include "stdlib.h"

//===============================================================
/*声明结构体*/
typedef struct istudent
{
    int iscrose;
    struct istudent* inext;
}node;
int i;

/*创建链表*/
node* icreate()
{
    node* iend,*inew,*ihead;
    int n;                        //声明录入的个数变量
    int scrose_num;                    //声明录入的数据变量
    i=0;                                    

    ihead=(node*)malloc(sizeof(node));        //分配头节点
    if(ihead==NULL)                        //如果头节点分配失败,提示并结束操作
    {
        printf("头文件节点分配失败!\n");
        return NULL;
    }
    ihead->inext=NULL;                 //置空头指针域
    iend=ihead;                     //头指针指向尾部节点

    /*输入不超过n个项目的整数*/
    printf("请输入准备录入的个数:\n");
    scanf("%d",&n);
    printf("请输入%d个整数:\n",n);
    
    while(i<n)                       //不超过n个项目的数目
    {
    i++;
    scanf("%d",&scrose_num);                   //录入数据
    if(scrose_num<0)                   //如果录入的数据小于0,结束操作
    {
        break;
    }
    inew=(node*)malloc(sizeof(node));           //新节点分配空间
    if(inew==NULL)                       //如果新节点分配空间失败,提示并返回空
    {
        printf("创建新节点失败!\n");
        return NULL;
    }
    
    inew->iscrose=scrose_num;                 //新节点保存数据
    inew->inext=NULL;                     //置空新节点指向的下一节点
    iend->inext=inew;                     //新节点插入尾部节点
    iend=inew;                         //指针新节点指向尾部节点
    printf("i的值为:%d\n",i);                 //输出了多少次整数
    printf("数目为:%d\n",inew->iscrose);                 //打印录入的整数
    }
    iend->inext=NULL;                     //置空尾节点
    return ihead;
}
//======================================================================================


/*打印链表*/

void prit(node* phead)
{
    node* itemp;
    itemp=phead;
    printf("要输入的数目总共为:%d\n",i);                    //打印录入的个数
    if(itemp==NULL)                                            //如果头节点为空
    {
        printf("链表为空!\n");
    }
    else
    {
        printf("头指针的地址为:%o\n",phead);                //打印头节点地址
        while(itemp!=NULL)                            //头节点不为空时,打印出录入的整数
        {
            printf("输入的数目为:%d\n",itemp->iscrose);
            itemp=itemp->inext;                    //指向下一节点
        }
        printf("\n");
    }

}
//==========================================================================================

    int main()
    {
        node* itep;
        itep=icreate();
        prit(itep);
        return 0;
    }



调试时,打印出现一个地址
调试结果如下:

请输入准备录入的个数:
5
请输入5个整数:
11
i的值为:1
数目为:11
12
i的值为:2
数目为:12
13
i的值为:3
数目为:13
14
i的值为:4
数目为:14
15
i的值为:5
数目为:15
要输入的数目总共为:5
头指针的地址为:34007030
输入的数目为:-842150451
输入的数目为:11
输入的数目为:12
输入的数目为:13
输入的数目为:14
输入的数目为:15

Press any key to continue

在打印录入的整数时会先出现一个地址,-842150451
请各位前辈指点,到底哪里出问题了?
谢谢!
搜索更多相关主题的帖子: color 
2015-12-17 12:58
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:40 
void prit(node* phead)
{
    node* itemp;
    itemp=phead;
    printf("要输入的数目总共为:%d\n",i);                    //打印录入的个数
    if(phead->inext==NULL)                                            //如果头节点为空
    {
        printf("链表为空!\n");
    }
    else
    {
        printf("头指针的地址为:%p\n",phead);                //打印头节点地址
        itemp = itemp->inext; //跳过头节点
        while(itemp!=NULL)                            //头节点不为空时,打印出录入的整数
        {
            printf("输入的数目为:%d\n",itemp->iscrose);
            itemp=itemp->inext;                    //指向下一节点
        }
        printf("\n");
    }

}

那个值压根就不是地址,你头节点里的iscrose值没有初始化的一个值。
2015-12-17 13:23
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
谢谢前辈。不过phead->inext==NULL和itemp->inext==NULL不一样的含 义吗?

前面已经  itemp=phead;了。不可以直接用itemp->inext==NULL吗?

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2015-12-17 20:12
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:0 
你寫的好像是itemp==NULL, 而不是itemp->inext==NULL               
2015-12-17 21:24
快速回复:链表打印时出现地址
数据加载中...
 
   



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

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