C语言结构体问题

structx{inta;intb;floatc;}n={1,3,5.0};structx*pn=&n;那么pn->b/n.a*++pn->b的值等于多少?我算的是3/1... struct x
{
int a;
int b;
float c;
}n={1,3,5.0};
struct x *pn=&n;
那么pn->b/n.a*++pn->b的值等于多少?
我算的是3/1*5.0=15.0?请问错在哪里
展开
 我来答
oo2033578
2012-03-05 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:118
采纳率:0%
帮助的人:90.5万
展开全部
朋友 你碰上的是经典错误
首先第一个错 pn->b/n.a*++pn->b 翻译之后变成 b/a*(++b) = 3/1*4 = 12

第二个错 即使按照你所描述的想法 估计按照你写的程序 你会这样改 :
pn->b/n.a*(++pn)->b
你肯定认为 (++pn)->b 是指向 c (也就是5.0)的吧 你试着运行 同样错 结果为0

根本原因:知识点理解---指针类型(此处为结构体指针)
struct x *pn 代表了pn是一个指向 struct x 类型的指针,所以,当 执行 (++pn)时,pn指针指向的地址增加的数量 等于 struct x 的字节数 也就是 int + int + float 的字节数 所以指向一个未知的空间 (此处的值默认为0)------------------所以并非楼主认为的变成指向 c
知识点类比:int *p = &n,当执行(++p) ,p指向的地址增加 int 的字节数
float *p = &n 当执行(++p) ,p指向的地址增加 float 的字节数
余下同理......
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
zhgqpower003
2012-03-05
知道答主
回答量:19
采纳率:0%
帮助的人:7.3万
展开全部
pn->b/n.a*++pn->b这个式子最后的++pn->b应该是++pn->c吧,要是是++pn->c的话,这个式子应该是3/1*(5.0+1)=18.0,因为++pn->c应该先把pn->c里的值加1然后在参加前边的运算。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
2012-03-05 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4481万
展开全部
这个表达式有二义性,在不同的编译系统下,结果不同。在VC++ 2005下,这样算的,测试也是16。
pn->b/n.a*++pn->b
=4/1*4
=4*4
=16
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式