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?请问错在哪里 展开
{
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?请问错在哪里 展开
3个回答
展开全部
朋友 你碰上的是经典错误
首先第一个错 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 的字节数
余下同理......
首先第一个错 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 的字节数
余下同理......
--
2022-12-05 广告
2022-12-05 广告
图形化编程简单理解为用积木块形式编程,scratch和python也是其中的一种,属于入门级编程,以其简单生动的画面获得无数学生的喜爱,深圳市创客火科技有限公司是一家做教育无人机的公司,旗下有编程无人机,积木无人机及室内外编队,每款飞机含有...
点击进入详情页
本回答由--提供
展开全部
pn->b/n.a*++pn->b这个式子最后的++pn->b应该是++pn->c吧,要是是++pn->c的话,这个式子应该是3/1*(5.0+1)=18.0,因为++pn->c应该先把pn->c里的值加1然后在参加前边的运算。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个表达式有二义性,在不同的编译系统下,结果不同。在VC++ 2005下,这样算的,测试也是16。
pn->b/n.a*++pn->b
=4/1*4
=4*4
=16
pn->b/n.a*++pn->b
=4/1*4
=4*4
=16
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询