>source

이 둘의 차이점은 무엇입니까?

x = x + 5

* y = * y + 5 (여기서 * y는 x의 주소를 가리킴)

내가 아는 한, 둘 다 동일한 값을주고 메모리 주소의 내용을 변경합니다. 실제 차이가 있습니까? 여분의 인출이 필요할 때 이와 같은 상황에서 포인터를 사용하는 이유는 무엇입니까?


  • 답변 # 1

    와이즈 비즈

    그렇지 않을 것입니다.

    포인터로 유용하게 사용할 수있는 작은 예입니다. 인수를 하나씩 증가시키는 함수를 작성한다고 가정 해 봅시다. 포인터 없이는 할 수 없습니다. 다음과 같이 보일 수 있습니다 :

    Why would you ever use a pointer in a situation like this when it requires an extra fetch?

    이제 다음과 같이이 함수를 사용할 수 있습니다 :

    void inc(int *x) {
        *x = *x + 1;
    }
    
    

    이 프로그램은 이것을 인쇄합니다 :

    int main() {
        int a = 5;
        printf("Value before: %d\n", a);        
        inc(&a); // The & is to send the address of the variable
        printf("Value after: %d\n", a);
    }
    
    

  • 답변 # 2

    일반적으로 한 부분의 변경 사항이 다른 부분에 반영되어 코드의 여러 부분이 동일한 값을 공유하고 작동 할 때 포인터를 사용합니다. 이것은 다른 부분에 방금 복사 된 값을 갖는 것과 대조적으로 "연결"을 원래 값으로 잃어 버립니다.

    예를 들어, 공유 값으로 작동하기 위해 정수 값에 대한 포인터를 함수에 전달할 수 있습니다. 이 함수는 포인터를 역 참조하여 "원래"전달 된 값을 직접 변경할 수 있습니다. 반대로, "값별"정수 값을 함수에 전달하면 함수가 사본에서 작동하며 "원래"값을 직접 변경할 기회가 없습니다.

    이전 또는 후자가 올바른 선택인지 여부는 일반적인 상태를 공유해야하는지 또는 코드의 일부를 분리 하려는지에 따라 다릅니다.

    Value before: 5 Value after: 6

관련 자료

  • 이전 calendar - Java를 사용하여 12 개월 연도 및 다음 2 년 인쇄
  • 다음 ansible - 플레이 북이 실행중인 호스트 마녀를 제외하고 그룹 호스트에서 서비스를 다시 시작하십시오