tibble %>%
ggplot(aes(x=Res,y=Value)) +
geom_bar(position="dodge",stat = "identity") +
facet_wrap(~Comp)
您能解释一下该程序背后的逻辑吗?
答案 0 :(得分:3)
像这样尝试(或使用调试器,或者只是在纸上帮助下进行思考)
#include <stdio.h>
int main()
{
int a[5] = {5, 1, 15, 20, 25};
int i, j, m;
i = ++a[1]; fprintf(stderr, "i is %d; a[1] is %d\n", i, a[1]);
j = a[1]++; fprintf(stderr, "j is %d; a[1] is %d\n", j, a[1]);
m = a[i++]; fprintf(stderr, "m is %d, i is %d; a[i] is %d\n", m, i, a[i]);
printf("%d, %d, %d", i, j, m);
}
答案 1 :(得分:3)
增量运算符(++
)的行为根据表达式的位置而有所不同。即++foo
首先递增变量foo
,然后产生表达式的递增值。但是,foo++
为您提供了foo
的值,但是如果您想进一步使用foo
,则它会增加。
因此逐行分析如下:
i = ++a[1]
:a[1]
是1
,其递增值是2
。因此,变量i
获得值2
。
j = a[1]++
:请记住,a[1]
现在是2
。因此,表达式的值为2
。因此,j
获得值2
。但是a[1]
递增,得到值3
。
m = a[i++]
:i
的值为2。它是递增的,但是此处未使用该值,而是使用旧值。因此,此处正在访问a[2]
。因此,m
成为15
。
最后,i
是3
,j
是2
,而m
是15
。
编辑:评论中指出,对++
运算符的讨论并不完全是技术性的。我只是采用一种教育的方式来解释事情。 @pmg描述了注释部分中实际发生的情况。
答案 2 :(得分:0)
有两个原因。
第一位Vue.component('todo-component', {
template: '#todo-component',
data: function () {
return {
items: [
{
id: 'item-1',
title: 'Checkout vue',
completed: false
}, {
id: 'item-2',
title: 'Use this stuff!!',
completed: false
}
],
newItem: ''
};
},
methods: {
addItem: function () {
if (this.newItem) {
var item = {
id: Math.random(0, 10000),
title: this.newItem,
completed: false
};
this.items.push(item);
this.newItem = '';
}
}
}
});
var app = new Vue({
el: '#vue-app'
});
修改了import axios from "axios";
,使其等于i++
。
第二,后递增运算符将值增加i
,但返回原始值。因此,不仅您正在修改3
,而且从中获得了错误的价值。与1
相同,您再次增加i
,使其为j
,但是运算符返回的原始值为a[1]
。要返回新值,请使用预递增运算符。
这是固定代码:
2+1=3
这会给您2
。
答案 3 :(得分:0)
让我们逐行进行分析:
i = ++a[1];
在这里,我们首先将a[1]
的值加1,然后将其分配给i
。
结果:a[1] == 2
,i == 2
j = a[1]++;
在这里,我们首先将a[1]
的值分配给j
,然后将a[1]
的值增加1。
结果:a[1] == 3
,i == 2
,j == 2
m = a[i++];
在这里,我们首先将a[i]
分配给m
,然后将i
增加1。
结果:a[1] == 3
,i == 3
,j == 2
,m = 15
这将是理解它的有用参考:https://en.cppreference.com/w/c/language/operator_precedence