C语言结构体问题

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?请问错在哪里

朋友 你碰上的是经典错误
首先第一个错 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 的字节数
余下同理......
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-05
pn->b/n.a*++pn->b这个式子最后的++pn->b应该是++pn->c吧,要是是++pn->c的话,这个式子应该是3/1*(5.0+1)=18.0,因为++pn->c应该先把pn->c里的值加1然后在参加前边的运算。
第2个回答  2012-03-05
这个表达式有二义性,在不同的编译系统下,结果不同。在VC++ 2005下,这样算的,测试也是16。
pn->b/n.a*++pn->b
=4/1*4
=4*4
=16
相似回答