在C中,使用++i
和之间有什么区别i++
,哪些应该在for
循环的增量块中使用?
有没有之间的性能差异i++
而++i
如果结果不能用?
我们有一个问题是Ci++
和++i
C之间有性能差异吗?
C++的答案是什么?
是否有差异++i
,并i++
在一个for
循环?它只是一个语法的东西吗?
执行此操作后会发生什么(窗帘后面)?
int x = 7;
x = x++;
Run Code Online (Sandbox Code Playgroud)
也就是说,当一个变量后期递增并在一个语句中赋值给自己时?我编译并执行了这个.在整个声明之后x
仍然是7 .在我的书中,它说增加了!x
我刚刚开始学习C,当做一个关于将指针作为函数的参数传递给指针的例子时,我发现了一个问题.
这是我的示例代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int* allocateIntArray(int* ptr, int size){
if (ptr != NULL){
for (int i = 0; i < size; i++){
ptr[i] = i;
}
}
return ptr;
}
void increasePointer(int** ptr){
if (ptr != NULL){
*ptr += 1; /* <----------------------------- This is line 16 */
}
}
int main()
{
int* p1 = (int*)malloc(sizeof(int)* 10);
allocateIntArray(p1, 10);
for (int i = 0; i < 10; i++){
printf("%d\n", p1[i]);
}
increasePointer(&p1);
printf("%d\n", *p1);
p1--;
free(p1); …
Run Code Online (Sandbox Code Playgroud) 你能解释一下这个Java代码的输出吗?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)
两种情况下的输出均为20
我目前正在学习C++,而且我刚刚学会了增量.我知道你可以使用"++ x"进行增量,然后使用"x ++"进行增量.
不过,我真的不知道何时使用两者中的任何一个...我从来没有真正使用过"++ x",到目前为止,事情总是很好 - 所以,我什么时候应该使用它?
示例:在for循环中,何时优先使用"++ x"?
此外,有人可以确切地解释不同的增量(或减量)如何工作?我真的很感激.
显然在我的Windows 8笔记本电脑上使用HotSpot JDK 1.7.0_45(所有编译器/ VM选项都设置为默认值),下面的循环
final int n = Integer.MAX_VALUE;
int i = 0;
while (++i < n) {
}
Run Code Online (Sandbox Code Playgroud)
比以下情况快至少2个数量级(~10 ms vs.~5000 ms):
final int n = Integer.MAX_VALUE;
int i = 0;
while (i++ < n) {
}
Run Code Online (Sandbox Code Playgroud)
在编写循环以评估另一个不相关的性能问题时,我碰巧注意到了这个问题.之间的差异++i < n
和i++ < n
是巨大的,足以显著影响结果.
如果我们查看字节码,更快版本的循环体是:
iinc
iload
ldc
if_icmplt
Run Code Online (Sandbox Code Playgroud)
而对于较慢的版本:
iload
iinc
ldc
if_icmplt
Run Code Online (Sandbox Code Playgroud)
因此++i < n
,它首先将局部变量递增i
1,然后将其推入操作数堆栈,同时i++ < n
以相反的顺序执行这两个步骤.但这似乎并不能解释为什么前者要快得多.后一种情况是否涉及临时副本?或者是否应该负责性能差异的字节码(VM实现,硬件等)以外的东西?
我已经阅读了一些关于++i
和i++
(但并非详尽无遗)的其他讨论,但未找到任何特定于Java的答案,并且与价值比较中涉及++i
或i++
涉及的情况直接相关.
java performance compiler-optimization pre-increment post-increment
在编程中,特别是在Java中,有什么区别:
int var = 0;
var++;
Run Code Online (Sandbox Code Playgroud)
和
int var = 0;
++var;
Run Code Online (Sandbox Code Playgroud)
这会对for循环产生什么影响?
例如
for (int i = 0; i < 10; i++) {}
for (int i = 0; i < 10; ++i) {}
Run Code Online (Sandbox Code Playgroud) post-increment ×10
java ×4
c ×3
performance ×3
c++ ×2
for-loop ×2
operators ×2
increment ×1
oop ×1
optimization ×1
pointers ×1