Tag: 后增量

后增量运算符行为

可能重复: C,C ++,Java和C#中的前后增量运算符行为 这是一个测试用例: void foo(int i, int j) { printf(“%d %d”, i, j); } … test = 0; foo(test++, test); 我希望得到一个“0 1”输出,但我得到“0 0”什么给出?

为什么两种技术中的相同代码表现不同

下面是我在C中的代码片段。 void main(){ int x = 7; x = x++; printf(“%d”,x); } 输出:8 public static void main(String[] args){ int x = 7; x = x++; System.out.println(x); } 输出:7 我不明白为什么两种语言给出不同的输出。 我在下面提到了链接什么是“x = x ++”之后的x?

单个语句中的多个增量运算符

可能重复: 未定义的行为和序列点 请解释以下陈述的行为 int b=3; cout<<b++*++b<<endl; 它将如何计算?

C中的后增量和前增量

我对这两个C语句有疑问: x = y++; t = *ptr++; 使用语句1,y的初始值被复制到x然后y递增。 使用语句2,我们查看* ptr指向的值,将其放入变量t,然后稍后增加ptr。 对于语句1,后缀增量运算符的优先级高于赋值运算符。 所以不应该首先递增y,然后将x赋值给y的递增值? 在这些情况下,我不理解运算符优先级。

数组中的预增量与后增量

我正在学习编程,我从C语言开始。 我正在读我们的C书。 我正在那本书中学习这个课程。 main( ) { int a[5] = { 5, 1, 15, 20, 25 } ; int i, j, k = 1, m ; i = ++a[1] ; j = a[1]++ ; m = a[i++] ; printf ( “\n%d %d %d”, i, j, m ) ; } 我的理解是,它将打印i as 2 , j as 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? 有人可以请解释一下吗? 谢谢。

C中的数组增量运算符

我不明白以下代码的结果: #include #include int main() { int a[4]={1, 3, 5, 6}; //suppose a is stored at location 2010 printf(“%d\n”, a + 2); printf(“%d”, a++); return 0; } 为什么第二个printf函数会产生以下错误? error: lvalue required as increment operand