| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1182 人关注过本帖
标题:指向结构体的指针(已解决)
只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

弄清楚对应的类型先啦.
你要引用结构体的成员,那当然先得是这个结构体类型的了.


倚天照海花无数,流水高山心自知。
2007-11-05 13:29
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
p=(struct stu*) student[0].name;这语句有问题
应该为p=&student[0];


英者自知,雄者自胜
2007-11-05 13:30
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
以下是引用nuciewth在2007-11-5 13:27:49的发言:
你不看看你指针指向的是什么.
p=(struct stu*) student[0].name;//这句也错了,错的很严重
明显是错误的引用p->num

*p是struct stu 变量,那它就应该有这个成员呀,不是很明白

2007-11-05 13:31
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
应该这样像12#写的样.你强制类型转换,但真正的指针类型是什么样子还是什么样子,你要移动就要看移动的长度.

倚天照海花无数,流水高山心自知。
2007-11-05 13:34
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用yqiong在2007-11-5 13:24:30的发言:
struct stu{
int num;
char name[20];
}student[3]={{1,"yqiong"},{2,"song"},{3,"li"}},*p;
main()
{stu *p=&student[0];
p=p+1;
printf("\n%d\n",p->num); /*输出的是28531,这什么意思呀?*/
printf("%d\n",sizeof(*p));//貌似也有问题,不知道你要测试什么
}


倚天照海花无数,流水高山心自知。
2007-11-05 13:37
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
printf("%d\n",sizeof(*p));//貌似也有问题,不知道你要测试什么
*p为struct stu类型,测的就是结构体的长度,就是各成员长度之各呀
2007-11-05 13:45
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
以下是引用yqiong在2007-11-5 13:31:58的发言:

*p是struct stu 变量,那它就应该有这个成员呀,不是很明白

你用了强制类型转换,虽然语法没什么错误,但逻辑上有错误,p此时的指针值是"yqiong"这个字符串的首地址,经过p=p+1后,p成为了一个野指针,指向了一个不确定的位置,最后p->num输出的也是不确定的值

[此贴子已经被作者于2007-11-5 13:47:58编辑过]


英者自知,雄者自胜
2007-11-05 13:47
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
以下是引用nuciewth在2007-11-5 13:34:51的发言:
应该这样像12#写的样.你强制类型转换,但真正的指针类型是什么样子还是什么样子,你要移动就要看移动的长度
哦,大概明白了


2007-11-05 13:49
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
以下是引用静思在2007-11-5 13:47:20的发言:

你用了强制类型转换,虽然语法没什么错误,但逻辑上有错误,p此时的指针值是"yqiong"这个字符串的首地址,经过p=p+1后,p成为了一个野指针指向了一个不确定的位置,最后p->num输出的也是不确定的值


当前p指向"yqiong"字符串首地址,p=p+1;此时p就指向"yqiong"字符串首地址后面的22个(结构体长度)字节地址.这样理解错误?这样算的话p有确定位置呀!但至于p->num输出确实不好说

2007-11-05 13:56
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

你==,我写个东西给你看
,这里连个编译器都没有,汗啦.


倚天照海花无数,流水高山心自知。
2007-11-05 14:01
快速回复:指向结构体的指针(已解决)
数据加载中...
 
   



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

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