| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1030 人关注过本帖
标题:结构体指针的一个问题
取消只看楼主 加入收藏
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:4 
结构体指针的一个问题
程序1:
#include "stdio.h"
typedef struct link
{
    int data;
    struct link* next;
}node;

node* p()
{
    node *head,*p,*q,r;
    head=(node*)malloc(sizeof(node));
    p=(node*)malloc(sizeof(node));
    q=(node*)malloc(sizeof(node));
    head->next=p;
    p->next=q;
    p->data=1;
    q->data=3;
    q->next=&r;
    r.data=4;
    r.next=NULL;
    return head;
}   
   
void main()
{
    node *head,*ptr;
    head=p();
    ptr=head;
    while(ptr->next!=NULL)
    {
        printf("%4d",ptr->next->data);
        ptr=ptr->next;
    }
}

----------------------------------------------------------------------------

程序2:
#include "stdio.h"
typedef struct link
{
    int data;
    struct link* next;
}node;

   
   
void main()
{
    node *head,*ptr,*p,*q,r;
    head=(node*)malloc(sizeof(node));
    p=(node*)malloc(sizeof(node));
    q=(node*)malloc(sizeof(node));
    head->next=p;
    p->next=q;
    p->data=1;
    q->data=3;
    q->next=&r;
    r.data=4;
    r.next=NULL;
    ptr=head;
    while(ptr->next!=NULL)
    {
        printf("%4d",ptr->next->data);
        ptr=ptr->next;
    }
}

差别在于一个调用函数,一个都在主函数里面,为什么1不能运行,2可以运行??
搜索更多相关主题的帖子: 结构体 return include void next 
2012-01-07 23:13
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
回复 2楼 战斗!立
不是很明白。能在具体一点吗?

主要是r有问题。

是因为子函数被调用完以后r就被释放了吗?

可以r.data还是能读出来,但r.next不行。
2012-01-07 23:42
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
回复 4楼 zaixuexi
是不是可以理解为r为局部变量。只在p()被调用的时候其作用,p() 结束后,内存释放。所以&r的值就不确定了?

结构体中其他的值使用指定定义的。所以不受p()影响。

2012-01-08 21:37
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
回复 6楼 有容就大
返回地址当然没有问题, 地址是始终存在的. 只不过p()指向地址的那个指针,在返回后就被销毁了.

但是地址所在的值还是存在,这就是为什么将指针传递到函数可以调用实参.我是这么理解的.
2012-01-09 11:16
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
回复 10楼 有容就大
r是栈分配,子函数完成,r被释放。这个是对的

*r也是栈分配,子函数完成,r被释放。

但是后者指针r被释放了,可是r指向地址的值是被保留的. 是这个意思吧.
2012-01-09 11:22
快速回复:结构体指针的一个问题
数据加载中...
 
   



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

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