| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6102 人关注过本帖
标题:结构体指针分配的动态空间,是怎么在这段空间内给结构体成员赋值,存值的。
只看楼主 加入收藏
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
结帖率:84.21%
收藏
已结贴  问题点数:30 回复次数:9 
结构体指针分配的动态空间,是怎么在这段空间内给结构体成员赋值,存值的。
struct node
{
    float score;
};
void main()
{
    struct node *p1;
    //给结构体指针开辟动态空间.
    p1=(struct node *)malloc(struct node);
    //这一句不怎么理解.
    scanf("%f",&p1->score);
}   
/*
    我是这样认为的:首先p1已经指向了一段已分配的连续空间的首地址,这是已知的.
    其次, p1->score .我记得 只有当p1=&(一个结构体变量时).好象便可以间接指向。
例子.
struct node
{
    float score;
};
    结构体定义都一样.
void main()
{
    //这里定义多定义个结构体变量.
    struct node Temp,*p1; //Temp多定义的.
    p1=&Temp;
    scanf("%f",p1->score);//这样就可以。
//---------------------------------------
    //但是,若 开辟动态内存空间.
    p1=(struct node *)malloc(struct node);
    //此时,这句就是不怎么懂.
    scanf("%f",&p1->score);
    // p1->score 书上说: 得到 p指向的结构体变量中的成员n的 值.
    // 然后&取地址.,是怎么滴,就给分配的动态空间赋值了。
}

/*
    求指教!请耐心回答,小生感激不禁!
    重点的是:结构体成员 score它应该有自己的内存空间地址.
    是怎么把值传递保存到了p1所开辟的内存地址当中,这里面有点小混乱。
*/


[ 本帖最后由 默默学习 于 2011-4-14 23:24 编辑 ]
搜索更多相关主题的帖子: 结构体 空间 
2011-04-14 23:20
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
我的理解能力退化了。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2011-04-14 23:34
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
收藏
得分:0 
回复 2楼 你们都要疼我哦
`
2011-04-14 23:45
boxinchao
Rank: 4
等 级:业余侠客
帖 子:51
专家分:231
注 册:2011-4-13
收藏
得分:10 
struct node *p1;
p1=(struct node *)malloc(struct node);
很明显指针p1是struct node类型的,那么p1->score操作就可以理解了

上面的操作虽然没有直接的p1=&Temp;这样使p1指向某个结构体的操作,但是p1=(struct node *)malloc(struct node);其实已经给p1赋值了,
它指向的就是新申请的一段struct node结构的内存起始地址,本质其实是一个意思
2011-04-14 23:57
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:15 
给我点分好不好?

p1=(struct node *)malloc(struct node)
这个malloc返回类型本来为void* ,强制转换成了struct node *
所以现在P1是个指针 指向一个struct node结构体
p1->score得到结构体中的score位置,&取得它的地址,scanf就放进去了。


而p1=&Temp;scanf("%f",p1->score)
P1指向的是一个具体了的结构体变量TEMP,所以直接就可以使用。

指针的类型注意一下,一个是指向结构体 一个是指向具体的结构体变量。
================================================
其实我是不懂的。。。根据你的描述,我蒙的。如果你的描述根本就是
错的,那我肯定蒙错了。如果你的描述是对的,那我蒙的也不一定是对的。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2011-04-15 01:05
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
收藏
得分:0 
这样吧,细化"最简短的一个问题".
"为什么 p->Temp" 指针p指向Temp后 "& p->Temp". 里面的存值是放到了动态开辟的空间.
我一直认为的是:指针只有取结构体成员变量地址,再进行指向的.
如: p=&Temp 那么p->Temp.score 输出 成员值. 因为p指向的是Temp结构体变量.
当p指向分配的动态空间首地址时候. 为什么 p->Temp可以输出,而且地址变到了 开辟分配的动态空间?
2011-04-15 10:44
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
呵呵呵呵呵呵

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-04-15 22:59
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
这个看书就能理解吧

                                         
===========深入<----------------->浅出============
2011-04-16 10:09
cacker
该用户已被删除
收藏
得分:5 
提示: 作者被禁止或删除 内容自动屏蔽
2011-04-16 11:20
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:0 
顶顶贴,学习知识

我的地盘
2011-04-16 17:15
快速回复:结构体指针分配的动态空间,是怎么在这段空间内给结构体成员赋值,存值的 ...
数据加载中...
 
   



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

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