| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1182 人关注过本帖
标题:指向结构体的指针(已解决)
取消只看楼主 加入收藏
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
结帖率:83.33%
收藏
 问题点数:0 回复次数:8 
指向结构体的指针(已解决)

指向结构体的指针
struct stu{
int num;
char name[20];
}student[3]={{1,"yqiong"},{2,"song"},{3,"li"}},*p;
main()
{p=(struct stu*) student[0].name;
p=p+1; /*执行p+1时,p的值增加了结构体的长度,这是书上的一句原话,
这句话什么意思呀?看不懂*/
printf("%s\n",p);
printf("%d",sizeof(struct stu)); /*输出为22*/
printf("%d",sizeof(*p)); /*这行也输出为22呀!*/
}

[此贴子已经被作者于2007-11-6 12:08:12编辑过]

搜索更多相关主题的帖子: 结构体 指针 
2007-11-05 12:24
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
以下是引用静思在2007-11-5 12:27:30的发言:

p=p+n使指针的值相对于当前的位置增加了n*L,L代表p指向的类型的长度

这只说明了p指针指向发生了变化,而不表明结构体长度增加了呀

2007-11-05 12:32
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
struct stu{
int num;
char name[20];
}student[3]={{1,"yqiong"},{2,"song"},{3,"li"}},*p;
p=(struct stu*) student[0].name;
执行了这个语句后,结构体中的成员有哪些呀?
2007-11-05 12:49
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
struct stu{
int num;
char name[20];
}student[3]={{1,"yqiong"},{2,"song"},{3,"li"}},*p;
main()
{p=(struct stu*) student[0].name;
p=p+1;
printf("\n%d\n",p->num); /*输出的是28531,这什么意思呀?*/
printf("%d\n",sizeof(*p));
}
2007-11-05 13:24
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
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
printf("%d\n",sizeof(*p));//貌似也有问题,不知道你要测试什么
*p为struct stu类型,测的就是结构体的长度,就是各成员长度之各呀
2007-11-05 13:45
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
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 

恩,明白了,谢谢

2007-11-06 12:07
快速回复:指向结构体的指针(已解决)
数据加载中...
 
   



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

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