C: I++ ++i 및 차이가 뭘까?

C 에서, '는 어떤 차이가 ++i 를 사용하여 i++' 및 '와' 를 사용할 수 있는 '블록' 을 하는 잉크레멘테이션 루프?

질문에 대한 의견 (3)
해결책
  • '가치' 가 ',' 난 후 ++i 증분할 반품해야 증분됩니다 값입니다.

i = 1. j = ++i. (i, j 는 2 2) 입니다.

  • '가치' 가 아니라 원래 값으로 반품하십시오 i++ 증분할 'i', 'i' 앞에 있는 유보됨 증분됩니다.

i = 1. j = i++. (i, j 는 2 인 1)

루프 '를 위한' 인컨텍스트 작동합니다. 그게 더 흔하게 사용되고 ++i 것 같다 '' 때문인지 K&amp, R.

모든 경우에 따라 ',', '&quot i++ 보다 ++i 준수하십시오 &quot 포지셔닝하십시오' # 39, won& 진실이며당신이 문제가 발생할 수밖에 없다.

39 에 대한 주석을 there& 몇 ++i i++ '와' 효율 ''. 믿지아니하며 비사양 수강생용 프로젝트 컴파일러, 성능 차이가 있을 수 없다. 이터레이션으로 교체되었는지 생성된 코드를 확인할 수 있으며, 될 수 있는 동일해집니다.

질문 효율성을 흥미롭습니다. # 39 의 시도는 here& 내 대답: https://stackoverflow.com/questions/24886/is-there-a-performance-difference-between-i-and-i &gt <;

, # 39 의 Freund) 에 따라 차이가 있기 때문에 'operator++ 유라유라테이코쿠 it& C++ 컴파일러 ()' 는 기능 및 객체에는 can& # 39, 임시 객체 생성 빼냅니다 최적화하려면 중간값 수용할 수 있을지 알 수 없다.

해설 (14)
        • 호출됨 사전 Increment. ++i i++ 게시물로의 증분할 알려져 있지만
  • 'i++' *

i++ post & # 39 는 '' 때문에 'i' 의 값을 1 씩 증분우선순위수준우선 증분을 작업 후 끝났다네.

다음 예를 볼 수 있습니다.

int i = 1, j;
j = i++;

하지만 여기서 'j' 1 '2' 의 가치를 i =. = 여기서 'i' 가치 'j' 다음 'i' 를 먼저 배정됩니다 증가합니다.

  • '++i' *

& # 39 ++i '는' 때문에 'i' 의 값을 1 씩 증분을 증분우선순위수준우선 사전 작업을 시작하기 전에. = i, j '가' i++ 실행하십시오 무슨뜻이냐믄 '후'.

다음 예를 볼 수 있습니다.

int i = 1, j;
j = ++i;

하지만 여기서 'j' 2 '2' 의 가치를 i =. = 여기서 'j' 를 '가치' 난 후 배정됩니다 잉크레멘션 'i' 의 'i'. 마찬가지로 '전 = i, j' 실행됨을 ++i ''.

  • 잉크레멘테이션 사용하도록 하는 질문에 대한 대답은, 어느 한 블록 for 루프는 가능* 사용할 수 있습니다. # 39 doesn&, t 일이 아니다. For 루프는 노스 것 같은 실행 시간.

for(i=0; i
해설 (1)

39, t, efficiency&quot &quot desktopplatforms don& 걱정. (속도, 정말) 재배케하여 더 빠릅니다. 우리는 이러한 일이 잘있게나 컴파일러에도 이러한 전지전능하심이라 둘 중 하나를 사용하여 보다 분명하게 이해할 수 기준으로 사용할 수 있는 의도를 보여 줍니다.

해설 (2)

'가치' 증분을 되돌려줍니다 ++i 관심용 거잖나.

i++ '다음' 값을 되돌려줍니다 증분을 거잖나.

39 의 it& 미묘한 차이가 났다.

For 루프는 ++i 를 사용하여 ',' 로 it& # 39 의 약간 빨라집니다. i++ 생성하시겠습니까 '가' 가 추가 카피됐나 그냥 던져진다.

해설 (2)

i++ ':' 첫 번째 값은 이 시나리오에서의 할당되었는지 그리곤요 증분식 일이 발생한다.

'++i': 먼저 이 시나리오에서의 증분우선순위수준우선 완료되어도 그리곤요 값을 할당되었는지

다음은 시각화 및 이미지 또한 [슬라이드에서는 좋은 실용 영상] (http://www.youtube.com/watch? v = lrtcfgbUXm4) 가 동일한 보여준다.

enter 이미지 여기에 설명을!

해설 (0)

I++ 보다 ++i 수 있는 것은 '' '약간' 에로남이네 i++ 로컬 복제본이므로 요구할 수 있다 '' 난 ',' 절대 동안 증분됩니다 가치를 심해지기 전에 ++i 않습니다. 경우에 따라서는 일부 컴파일러에도 거두어 최적화합니다 가능하면 했다. 하지만 이 모든 것이 항상 가능한 it& # 39 의 아니라 못하며창조된 컴파일러에도.

39 에 최적화, 그래서 내가 너무 많이 빠지지 않고, d, s # 39 컴파일러에도 I& 따라와야지 라이언 Fox& 조언: when I ',' 내가 사용하는 ++i 를 모두 사용할 수 있습니다.

해설 (1)

두 정상은 증분할 번호입니다. + 1 = "나는 '내가' ++i '에 해당하는 것이다.

i++ 매우 유사한 '이 아니라' '와' ++i 똑같은. 하지만 '수' 증분을 ++i 전에 모두 증분할 번호, 현재 표현식에서는 반면, '수' 증분을 검사됩니다 i++ 후 표현식에서는 검사됩니다.

예:

int i = 1;
int x = i++; //x is 1, i is 2
int y = ++i; //y is 3, i is 3
해설 (0)

그 중 하나를 사용하여 는 유효 동일해집니다. 즉, 루프 할 일을 정확히 동일한 모두에서 인스턴스입니다.

I++ ++i 를 통한 효율성 측면에서 관련이 있을 수 있다는 것. 측면에서 언어를 사용하여 만들 수 있는 가치를 추가 복제본이므로 사양명세 게시물로의 증분식 작동자 /dev/raw/raw200 연산자에서 움직이고 있습니다. 이 관계자는 추가 작업이 될 수 있다.

그러나 앞의 두 가지 문제를 고려해야 할 수 없다.

  1. 현대 컴파일러에도 매우 크다. 이 모든 것을 볼 수 있는 것은 컴파일러에도 머리가 너무 좋은 것 같은 두 가지 방법 모두 정수 증분할 for 루프는 최적화합니다 효율적인 코드를. 실제로 사용하는 경우 프로그램에 비해 느린 것으로 인해 게시물로의 증분식 사전 증분식 실행 시간 후 컴파일러와의 사악함이라 사용하고 있습니다.

  2. 시간 복잡도 운영 면에서, 이 두 가지 방법 (해도 실제로 복제본에 수행 중인) 동일합니다. 루프 내부에 지침을 수를 작전을 수행 중인 지배하십시오 증분우선순위수준우선 작업을 할 수가 크게. 따라서 믿지아니하며 상당히 크기, 루프 성능저하 증분식 메서드입니다 적립율은 대규모 밀려 실행할 루프 바디입니다. 즉, 너는 내가 긁어줄게 오프하도록 코드만이 최적화합니다 루프의 걱정 아닌 증분식.

제 생각에는, 스타일, 결국 이 모든 문제를 단순히 아래로 기본. 그렇게 생각한다면 사전 증분식 판독값, 더 후 사용한다. 개인적으로 선호하는 게시물로의 린스먼트 요소라고 할 수 있으나, 그 전에 내가 가르쳐 준 전송되었기 때문에 내가 알고 있는 것은 아무것도 최적화합니다.

이는 전형적인 예로, 이 문제가 이렇게 심각한 문제가 발생할 수 있는 눈을 너무 일찍 최적화, 미국 디자인. 좋은 질문, 그러나 아직 없기 때문에 일반적으로 사용 또는 합의, best 에 &quot 조도비 practice.&quot.

해설 (0)

'++i': 다른 하나는 게시물로의 증분식 사전 증분식 있다.

i++ ':' 그 후 증분을 요소점과 가져옵니다. '++i': 난 후 증분을 되돌려줍니다 요소.

예:

int i = 0;
printf("i: %d\n", i);
printf("i++: %d\n", i++);
printf("++i: %d\n", ++i);

출력:

i: 0
i++: 0
++i: 2
해설 (0)
  • '++i' (접두어입니다 작업). * 다음 값은 증분을 color_name (예): '내가', 'int b = ++i' int = 5 이 경우, 6 할당되었는지 b 첫 그리곤요 증분을 7 및 드릴링됩니다.

  • 'i++' (후위 작업). * 다음 가치를 증분을 color_name (예): '내가', 'int b = i++' int = 5 이 경우 5 할당되었는지 b 그리곤요 증분을 첫 6 및 드릴링됩니다.

을 넣다) 의 루프: i++ ',' 우리가 사용하는 값 때문에 일반적으로 주로 사용되는 시작 전에 "나는 '에서 루프지 증가 하지만 프로그램 논리에 따라 달라질 수 있습니다.

해설 (0)

i++ 및 ++i # #

이 작은 차이가 좀 다른 각도에서 답을 이미 게시하기를 비해 코드를 시각화합니다 데 도움이 될 수 있습니다.

int i = 10, j = 10;

printf ("i is %i \n", i);
printf ("i++ is %i \n", i++);
printf ("i is %i \n\n", i);

printf ("j is %i \n", j);
printf ("++j is %i \n", ++j);
printf ("j is %i \n", j);

결과는.

//Remember that the values are i = 10, and j = 10

i is 10 
i++ is 10     //Assigns (print out), then increments
i is 11 

j is 10 
++j is 11    //Increments, then assigns (print out)
j is 11 

전후에 이슬람세를 신경을 쓰고 있습니다.

# for 루프

그 중 하나를 사용할 수 있는 경우와 작업공간에서 잉크레멘테이션 for 루프는 블록, 내 생각에 우리가 할 수 있는 최선의 결정을 내리는 것은 사용) 가 좋은 예다.


int i, j;

for (i = 0; i 
해설 (0)

다음의 C 코드 부분은 전치 차이는 사전 및 사후 증감 연산자:

int  i;
int  j;

증분식 연산자:

i = 1;
j = ++i;    // i is now 2, j is also 2
j = i++;    // i is now 3, j is 2
해설 (0)

지금 내가 solaris. 이해하겠니 차이는 시맨틱스를 (단, 왜 그랬을까 장난하는거아니고

39, & # 39 는 어떤 X mean& 연산자입니다 하나님께용서를 백성중에. 스택 오버플로 대한 질문이 아닌 판독값,

you know, 책 또는 웹 자습서는 또는 무언가.

어쨌든 지금처럼 계속 사용할 수 있는 성능을 어느쪽이야 무시입니다 질문을합니다 심지어 c++컴파일러는 중요한 것 같지는 않습니다. 이것은 콩지름에 결정할 때 때문이다. 사용할:

무슨 뜻인지 말하도다 코드에서.

39 don& 할 경우, t, t, don& 전에 값을 증분식 기술서임을 # 39 에 사용하는 형태의 모습이다. # 39 의 it& 않으면 사소한 시비로 작업하고 있지만 한 것을 금지하는 스타일 가이드

다른 버전 모두 찬성하는 (lc-fc 한 뼈 머리 스타일 가이드), 콩지름에 이 경우는 가장 정확하게 할 수 있는 형태로 너희는너희가 위해 노력하고 있다.

QED) 을 사용하여 사전 증분식 버전:

for (int i = 0; i != X; ++i) ...
해설 (0)

&gt. 주요 차이는 &gt. &gt. i++ 게시물로의 ( 후 증분식 ) 와 - &gt. - ++i 사전 ( 전에 증분식 ) &gt. &gt. - i = 1 ',' n 'like' 1.2,3.4 루프 증분을 못할 경우 &gt. - i = 1 ',' n '사전' 같은 경우 증분을 2.3,4.5 루프

해설 (0)

이 단순한 C++ 코드에 의해 차이를 이해할 수 있다 (아래 참조).


int i, j, k, l;
i = 1; //initialize int i with 1
j = i+1; //add 1 with i and set that as the value of j. i is still 1
k = i++; //k gets the current value of i, after that i is incremented. So here i is 2, but k is 1
l = ++i; // i is incremented first and then returned. So the value of i is 3 and so does l.
cout 
해설 (0)

얼마 지나지 않아.

i++ 먹어서나 않을 경우 이들을 '는' ++i '와' 같은 함수. 같은 항목을 사용할 경우 '함수 (i++)' 또는 '함수 (++i)' 차이를 볼 수 있습니다.

'내가 먼저 함수 (++i)' 이 'i' 에 따르면, 이후에는 동일팔레트에 증분우선순위수준우선 새 값을 1 씩 작동합니다.

'기능이 있다고 (i++)' 'i' 를 통해 그 이후 첫 동일팔레트에 함수은 증분우선순위수준우선 'i' 1.

int i=4;
printf("%d\n",pow(++i,2));//it prints 25 and i is 5 now
i=4;
printf("%d",pow(i++,2));//it prints 16 i is 5 now
해설 (1)
  • 사전 클레멘스 고말은 증분식 같은 줄에. 이후 executes.* 고말은 증분할 게시물로의 증분식 선
int j=0;
System.out.println(j); //0
System.out.println(j++); //0. post-increment. It means after this line executes j increments.

int k=0;
System.out.println(k); //0
System.out.println(++k); //1. pre increment. It means it increments first and then the line executes
  • 사용하거나, and it 가 더 interesting.* 측면에서 볼 때,
int m=0;
if((m == 0 || m++ == 0) && (m++ == 1)) { //false
/* in OR condition if first line is already true then compiler doesn't check the rest. It is technique of compiler optimization */
System.out.println("post-increment "+m);
}

int n=0;
if((n == 0 || n++ == 0) && (++n == 1)) { //true
System.out.println("pre-increment "+n); //1
}
  • 어레이당 *
System.out.println("In Array");
int[] a = { 55, 11, 15, 20, 25 } ;
int ii, jj, kk = 1, mm;
ii = ++a[1]; // ii = 12. a[1] = a[1] + 1
System.out.println(a[1]); //12

jj = a[1]++; //12
System.out.println(a[1]); //a[1] = 13

mm = a[1];//13
System.out.printf ( "\n%d %d %d\n", ii, jj, mm ) ; //12, 12, 13

for (int val: a) {
     System.out.print(" " +val); //55, 13, 15, 20, 25
}
  • C++에서 게시물로의 / 사전 증분식 포인터의 가변으로 *

#include 
using namespace std;

int main() {

    int x=10;
    int* p = &x;

    std::cout
해설 (0)

유일한 차이점은 운영 주문하십시오 증분우선순위수준우선 간의 변수의 값을 연산자에서 되돌려줍니다.

이 코드는 출력입니다 차이에 대해 설명하고 있다.

#include

int main(int argc, char* argv[])
{
  unsigned int i=0, a;
  a = i++;
  printf("i before: %d; value returned by i++: %d, i after: %d\n", i, a, i);
  i=0;
  a = ++i;
  printf("i before: %d; value returned by ++i: %d, i after: %d\n", i, a, i);
}

출력은 다음과 같습니다.

i before: 1; value returned by i++: 0, i after: 1
i before: 1; value returned by ++i: 1, i after: 1

그래서 기본적으로 ',' 동시에 '후' ++i 값을 되돌려줍니다 증분됩니다 ++i 전에 값을 되돌려줍니다 올라갑니다. 결국 이 두 경우 모두 '나' 증분됩니다 그 값을 가지게 됩니다.

또 다른 예를 들어:

#include

int main ()
  int i=0;
  int a = i++*2;
  printf("i=0, i++*2=%d\n", a);
  i=0;
  a = ++i * 2;
  printf("i=0, ++i*2=%d\n", a);
  i=0;
  a = (++i) * 2;
  printf("i=0, (++i)*2=%d\n", a);
  i=0;
  a = (++i) * 2;
  printf("i=0, (++i)*2=%d\n", a);
  return 0;
}

출력:

i=0, i++*2=0
i=0, ++i*2=2
i=0, (++i)*2=2
i=0, (++i)*2=2
  • # 여러 차례 차이가 없습니다

    차이가 있을 때 또 다른 변수가 할당되었는지 증분우선순위수준우선 수행될 때 선택해제합니다 반환 값 또는 다른 작업과 적용되고 있는 연결 (운영체 우선 순위 ('i++2' 다르다 '++i ' 하지만 ' (i++) 2' 와 ' (++i) *2' 같은 값을 되돌려줍니다) 대부분의 경우, 교환 가능. 고전적인 비유하사 for 루프 문법:


for(int i=0; i
해설 (0)

내부 변환되게 것으로 생각할 수 있는 여러 명령문입니다 a ,

// case 1 :

i++;

/* you can think as,
 * i;
 * i= i+1;
 */

// case 2

++i;

/* you can think as,
 * i = i+i;
 * i;
 */
해설 (0)

i++ 고말은 a 가 a = 현재 i 값 내가 값을 a 가 a = ++i 증분됩니다 고말은

해설 (1)