| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1183 人关注过本帖
标题:[求助]有关结构体指针的一道题??!!哪位仁兄指点指点
只看楼主 加入收藏
lzmhstc
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-3-25
收藏
 问题点数:0 回复次数:10 
[求助]有关结构体指针的一道题??!!哪位仁兄指点指点
struct ks
{int a;
int *b;
}s[4],*p;
main()
{ int n=1,i;
printf("\n");
for(i=0;i<4;i++)
{ s[i].a=n;
s[i].b=&s[i].a;
n=n+2;
}
p=&s[0];
p++;
printf("%d,%d\n",(++p)->a,(p++)->a);

}

为什么运行结果会是 7,3 呢???
搜索更多相关主题的帖子: 结构体 指针 仁兄 int 
2007-05-09 22:13
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
p=&s[0];
p++;//p==&S[1]

printf("%d,%d\n",(++p)->a,(p++)->a);
编译器从右开始扫描,所以后面的(p++)->a==s[1]a,p==&s[2].
再做(++p)使得p==&s[3].所以最前面的那个输出s[3].a
s[].a的内容依次是1 3 5 7.
所以输出就是7 3.

倚天照海花无数,流水高山心自知。
2007-05-09 22:22
lzmhstc
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-3-25
收藏
得分:0 
谢谢版主.
课本里没说编译器从右开始扫描.
我以为是按从左到右

2007-05-09 23:00
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
课本里没说编译器从右开始扫描.
我记得有说.

倚天照海花无数,流水高山心自知。
2007-05-09 23:03
lzmhstc
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-3-25
收藏
得分:0 

我用的是谭浩强版的,书里没看到.郁闷

2007-05-09 23:18
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
第二版的在讲I++,++I的时候有讲.

倚天照海花无数,流水高山心自知。
2007-05-09 23:28
lzmhstc
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-3-25
收藏
得分:0 
再请教版主一个问题,有关位段的.我总是弄不清楚
struct bit
{ unsigned a_bit:2;
unsigned b_bit:2;
unsigned c_bit:1;
unsigned d_bit:1;
unsigned e_bit:2;
unsigned word:8;
};
main()
{
struct bit *p;
unsigned int modeword;
printf("Enter the mode word(HEX):");
scanf("%x",&modeword);
p=(struct bit *)&modeword;
printf("\n");
printf("a_bit:%d\n",p->a_bit);
printf("b_bit:%d\n",p->b_bit);
printf("c_bit:%d\n",p->c_bit);
printf("d_bit:%d\n",p->d_bit);
printf("e_bit:%d\n",p->e_bit);
}
例如输入96,则结果为
a_bit:2
b_bit:1
c_bit:1
d_bit:0
e_bit:2
能帮我解释为什么吗

2007-05-09 23:58
ibiancheng
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2007-4-3
收藏
得分:0 

unsigned int modeword;

scanf("%x",&modeword);
楼主这里有没有错误呀?????


执著的信念,坚定的自信,勤奋的努力才是通向成功的捷径! !!
2007-05-11 17:41
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
以下是引用ibiancheng在2007-5-11 17:41:56的发言:

unsigned int modeword;

scanf("%x",&modeword);
楼主这里有没有错误呀?????

我没看前提

如果单从格式上来说

这个是没错的

%x表示的十六进制数


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

十六进制96=0000,0000,1001,0110,数是倒过来存储的.高地址低位置.

unsigned a_bit:2;//取后两位10
unsigned b_bit:2;//依次倒过来取01
unsigned c_bit:1;1
unsigned d_bit:1;0
unsigned e_bit:2;10
unsigned word:8;//最前8位,为0.

所以输出就是2 1 1 0 2.


倚天照海花无数,流水高山心自知。
2007-05-11 19:35
快速回复:[求助]有关结构体指针的一道题??!!哪位仁兄指点指点
数据加载中...
 
   



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

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