Tag: 预增量

带逻辑运算符的混合增量运算符

如果我有这个代码,我有一个关于使用逻辑运算符的前后增量的问题 void main() {int i = – 3 , j = 2 , k = 0 , m ; m=++i||++j&&++k; printf(“%d %d %d %d”,i,j,k,m);} 知道增量和减量运算符的优先级高于&&和|| 所以他们先被执行然后&&高于 表示-2 || 3 && 1,它给出printf的值-2 3 1 1 但是在尝试使用VS2010时我得到的输出是-2 2 0 1 有没有人对此有任何解释? 问候,,

指针增量和解除引用(左值必需错误)

我试图理解指针递增和解除引用是如何组合在一起的,我这样做是为了试一试: #include int main(int argc, char *argv[]) { char *words[] = {“word1″,”word2”}; printf(“%p\n”,words); printf(“%s\n”,*words++); printf(“%p\n”,words); return 0; } 我希望这段代码可以执行以下操作之一: 首先取消引用然后增加指针(打印word1) 首先取消引用然后增加值(打印ord1) 取消引用指针+ 1(打印word2) 但编译器甚至不会编译它,并给出了这个错误: lvalue required as increment operand我在这里做错了吗?

C中函数调用的后缀或前缀增量的未定义行为

我在这个网站上看到,函数调用中的前缀增量或后缀增量可能会导致未定义的行为。 我最近经历过其中一个。 源代码是这样的: #include void call(int,int,int); int main() { int a=10; call(a,a++,++a); printf(“****%d %d %d***_\n”,a,a++,++a); return 0; } void call(int x,int y,int z) { printf(“%d %d %d”,x,y,z); } 输出结果为12 11 12 **** 14 13 14 *** _。 但是,当a在函数中首先打印时,它不应该是10吗? 它为什么变成12? 另外,为什么++从12减少到11? 有人可以请解释一下吗? 谢谢。