| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3482 人关注过本帖
标题:创建链表两个指针看不懂,pEnd与pNew
取消只看楼主 加入收藏
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:7 
创建链表两个指针看不懂,pEnd与pNew
struct Student* Create()                        
{
    struct Student* pHead=NULL;                    
    struct Student* pEnd,*pNew;                    
    iCount=0;                           
    pEnd=pNew=(struct Student*)malloc(sizeof(struct Student));   
    printf("please first enter Name ,then Number\n");
    scanf("%s",&pNew->cName);                    
    scanf("%d",&pNew->iNumber);                    
    while(pNew->iNumber!=0)
    {
        iCount++;                        
        if(iCount==1)                        
        {
            pNew->pNext=pHead;               
            pEnd=pNew;                    
            pHead=pNew;                    
        }
        else                           
        {
            pNew->pNext=NULL;               
            pEnd->pNext=pNew;               
            pEnd=pNew;
        }
        pNew=(struct Student*)malloc(sizeof(struct Student));   
        scanf("%s",&pNew->cName);
        scanf("%d",&pNew->iNumber);
    }
    free(pNew);                           
    return pHead;
}

//pEnd与pNew从pEnd=pNew=(struct Student*)malloc(sizeof(struct Student))中不是得到同一块内存的地址吗,操作任意一个指针变量等于操作一块内存,我感觉就是拿着一个地址穿来穿去,就被掉包了,就好像两个指针变量的指向变成了指向不同内存了,绕晕了
搜索更多相关主题的帖子: Create please 
2016-07-13 14:21
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
回复 2楼 grmmylbs
程序代码:
struct Student* Create()                        

 {
     struct Student* pHead=NULL;                    
     struct Student* pEnd,*pNew;                    
     iCount=0;                            
     pEnd=pNew=(struct Student*)malloc(sizeof(struct Student));    
     printf("please first enter Name ,then Number\n");
     scanf("%s",&pNew->cName);                    
     scanf("%d",&pNew->iNumber);                    
     while(pNew->iNumber!=0)
     {
         iCount++;                        
         if(iCount==1)                        
         {
             pNew->pNext=pHead;                
             pEnd=pNew;               //这里pEnd与pNew的存储值应该是同一个地址呀,为什么又重新取值
             pHead=pNew;              //然后这里pHead也应该是取pEnd与pNew的存储值,就是那个内存地址,我觉得就是在传递相同的地址,毫无意义的操作,是我哪理解错了?
         }
         else                            
         {
             pNew->pNext=NULL;                
             pEnd->pNext=pNew;               
             pEnd=pNew;                      
         }
         pNew=(struct Student*)malloc(sizeof(struct Student));    
         scanf("%s",&pNew->cName);
         scanf("%d",&pNew->iNumber);
     }
     free(pNew);                            
     return pHead;

 }


[此贴子已经被作者于2016-7-13 17:37编辑过]

2016-07-13 17:34
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
回复 4楼 grmmylbs
看不懂创建链表第一个节点时的指针变量,两个指针变量存储的地址值我觉得是相同的地址,pNew->pNext与这个pEnd->pNext应该是操作同一块内存中的pNext呀,为什么pNew->pNext=NULL后,还需要pEnd=pNew

难道pEnd与pNew在(struct Student*)malloc(sizeof(struct Student))中取得不是内存地址,而是表示两块同等大小的内存?

[此贴子已经被作者于2016-7-13 17:55编辑过]

2016-07-13 17:51
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
回复 7楼 grmmylbs
书籍的注释是:跟踪新加入的节点
2016-07-13 17:56
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
回复 6楼 linlulu001
pEnd=pNew; 这个是多余的?
2016-07-13 17:57
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
if(iCount==1)                        
{
    pNew->pNext=pHead;               
    pHead=pNew;     //这放我感觉像是贪吃蛇 ,最后吃到自己尾巴
}
2016-07-13 18:07
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
回复 12楼 grmmylbs
临睡前终于看懂了,实在太绕口了,感谢郭嘉感谢各位大神
2016-07-13 21:40
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
以下是引用grmmylbs在2016-7-13 17:54:50的发言:

这个确实没必要。


        if(iCount==1)                        
        {
            pNew->pNext=pHead;               
            pEnd=pNew;          //我感觉这个代码是作者是想凸显提示新手,这个pEnd很重要,因为下个节点的时候pNew将会改变成为下一个节点的内存地址,而pEnd就是首节点的地址
            pHead=pNew;                    
        }

了解这些代码之前,我去看了网上的讲解视频,才知道头指针与首节点的概念,书籍居然没讲到这些,假如我不知道这些还真是无法了解链表

[此贴子已经被作者于2016-7-13 21:46编辑过]

2016-07-13 21:44
快速回复:创建链表两个指针看不懂,pEnd与pNew
数据加载中...
 
   



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

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