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 的字节数
余下同理......
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询