아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
검은물수리128
검은물수리12819.06.16

포인터에 대해 질문이 있습니다

int x=6;
int *p=&x;
printf("%d\n", --(*p));
printf("%d\n", (*p)++);

의 출력은

5

5

인가요

5

6

인가요?

궁금합니다.....

55글자 더 채워주세요.
답변의 개수
3개의 답변이 있어요!
  • Leftside님 안녕하세요.

    출력에 대한 내용은 직접 코드를 작성해서 실행해보시면 답이 나올탠데요

    아마 그러지 못하는 환경이거나 왜 그렇게 나오는지에 대해 궁금해서 질문 올리셨을꺼라 생각합니다.

    일단 연산자가 앞에 붙는것과 뒤에 붙는 것이 조금 다르게 동작해요.

    연산자가 앞에 붙으면 먼저 계산을 하고 값을 사용한다고 생각 하시면 되고

    연산자가 뒤에 붙으면 값을 사용하고 계산을 한다고 생각 하시면 돼요

    그래서 printf("%d\n", --(*p)); 같은 경우는 6에서 1을 감소시키고 값을 사용하기 때문에 5가 출력이 되고

    printf("%d\n", (*p)++); 같은 경우는 1이 감소된 값인 5가 출력이 되고 1을 증가 시키게 됩니다.


  • 해당 질문의 답변은 본인이 실행시켜보면 바로 나오는 답입니다.

    실행도 시켜보지도 않고 질문을 하시는 건가요?

    해당 코드를 실행시켜보지도 않고 결과값만을 묻는 질문은 어떤 의도 인지 모르겠습니다.

    컴파일러로 바로 실행시켜보세요

    할말이 없어 128자 채우기도 힘드네요.


  • 포인터에 대한 질문이라기보다는 연산자에 대한 질문이라고 봐야겠습니다.

    print(--p) 의 경우 print가 일어나기전에 이미 p를 -1 한다는 뜻입니다.

    x가 6이였기때문에 그럼 p는 5가 되겠죠.

    print(p++)의 경우는 print p를 한 후에 p를 +1 한다는 뜻입니다.

    그럼 p는 원래 6이였기때문에 7이 되겠죠??

    그런데 print(--p)를 이미 했던상태기때문에 고려하면

    p는 6으로 시작하여 5가 되었다가 다시 6이 됩니다.

    콘솔에 찍히는건

    5가 찍혔다가 또 5가 찍히겠네요.