我对以下代码片段有疑问
float func(float x, float y)
{
return x*0.5 + y;
}
int main()
{
float x = 0.5;
if (x = func(x, x++))
{
printf("%f\n", x);
}
}
Run Code Online (Sandbox Code Playgroud)
上面代码的答案是1.250000.在函数调用中,x ++表示0.5 ++.函数传递1.0到x ++参数.我想知道0.5 ++是什么意思?为什么它再添加0.5而不是添加1.0?请帮我
所以我一直在读一本 C++14 书(这是我图书馆最新的一本),尽管我比它深了大约 100-200 页,但有些东西一直在我的脑海中游动,但在某些时候它提到了这一点打脸:
i++ + ++i;
Run Code Online (Sandbox Code Playgroud)
它说不要这样做,但我还是这样做了。在 Visual Studio C++ 和在线 C++ 编译器(特别是 onlinegdb)中,它给我3when int i = 1;,但是当我分配 时i = i++ + ++i;,在线编译器给我4,Visual Studio 给我5......让我们看看, ifi++递增i但 是原始值,并且++i递增i和是新的和改进的 i,那么如果int i = 1;,我们会这样做:
1 + 2;
Run Code Online (Sandbox Code Playgroud)
并且i会是3!两个编译器都这么说。但 i = i++ + ++i;给出了不同的答案!我希望我可以验证这一点,但我无法在脑海中计算分配和增量。也许这就是编译器正在做的事情,一个在表达式中分配然后递增,另一个则做相反的事情。PEMDAS 与 PEDMAS 的精神对比。
所以我知道这是未定义行为的字面教科书示例,但无论如何我都会问一个问题:在实践中是否有未定义行为 的使用,是否有充分的理由使用这段特定的代码(可能没有)因为它的可怕性质),关于这段代码(及其交易)还有什么需要注意的吗?
int main()
{
int var = 1;
var += ++var;
cout<<var;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Java中,这将按预期输出3,但在C++(上面)中输出4.为什么?
以下程序正在打印 49
#include <stdio.h>
#define SQR(x) (x*x)
void main(void) {
int x, y; x = 5;
y = SQR(++x);
printf("y is %d\n", y);
}
Run Code Online (Sandbox Code Playgroud)
我不明白我错过了什么.
这里就是我理解它是如何可能是工作
在SQR(++x), ++x将被评估为6之后x*x的36应退还.
因此y = 36
,答案是49
代码:
for(int i=0;i<5;){
i=i++;
printf("%d",i);
}
Run Code Online (Sandbox Code Playgroud)
上面的程序无限打印零,这怎么可能?有声明i=i++;。请解释为什么 的值i不增加。
i=2;
i= ++i + ++i + ++i;
printf(i)
Run Code Online (Sandbox Code Playgroud)
请给出输出说明吗?
我得到的答案是12但它应该是13.
为什么这些程序有效,为什么我没有出现"分号丢失"错误?有了这个问题,我想问一下,当我可以跳过分号.据我所知,分号是句子终止符.在我们使用逗号而不是分号的情况下编写这些类型的语句是否正确.在program1中有一个否定然后打印然后getchar()在一行中没有分号和使用逗号.类似地,在程序2中使用了否定赋值,printf和getchar().我们可以使用逗号写多少行而不使用分号.
程序1:
#include <stdio.h>
int main()
{
int i = 0xAA;
~i, printf("%X\n", i),getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
计划2:
#include <stdio.h>
int main()
{
int i = 0xAA;
i=~i, printf("%X\n", i),getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 为什么Java输出50时C++输出51相同的代码概念?
int i=5;
i= (++i + ++i + ++i + ++i + ++i + i++);
print i
Run Code Online (Sandbox Code Playgroud)
Java的: 50
C++: 51