포인터 주소 대 포인터를 C의 포인터에 전달

사용자

이 두 코드 사이에 약간 혼란스러워합니다.

버전 1 : (컴파일 후 경고 표시)

int func(int *ptr2)
{
    *ptr2 += 1;
}

int main()
{
    int a = 5;
    int *ptr = &a;

    printf("Address of a: %x\n", a);
    printf("Before: %x\n", ptr);
    func(&ptr);
    printf("After: %x\n", ptr);
    return 0;
}

산출:

Address of a: 5770a18c
Before: 5770a18c                                                                                                           
After: 5770a18d 

버전 2 :

int func(int **ptr2)
{
    *ptr2 += 1;
}

int main()
{
    int a = 5;
    int *ptr = &a;

    printf("address of a: %x\n", &a);
    printf("Before: %x\n", ptr);
    func(&ptr);
    printf("After: %x\n", ptr);
    return 0;
}

산출:

Address of a: cc29385c
Before: cc29385c                                                                                                           
After: cc293860

참조로 전달할 때 C의 포인터를 올바르게 이해하고 있다면 해당 위치에 대한 포인터를 만드는 것입니다. 이를 통해 역 참조 연산자를 통해 포인터가 보유한 주소의 값을 변경할 수 있습니다.

그러나 포인터가 보유한 값을 변경하려면 포인터에 대한 포인터를 사용합니다. 포인터의 주소를 전달하고 해당 주소를 보유 할 새 포인터를 만듭니다. 값을 변경하려면 역 참조 연산자를 사용하여 포인터의 (다른 곳에 정의 된) 값에 액세스합니다.

바라건대 나는 올바른 길을 가고 있지만 버전 1에서 일어나는 일을 구체적으로 시각화하는 데 어려움을 겪고 있습니다. 주로이 두 프로그램의 구성과 출력의 차이를 이해하고 싶습니다. 버전 1이 여전히 포인터에 대한 포인터라고 가정하지만 두 프로그램간에 증가 된 값이 다른 이유는 무엇입니까? 버전 1이 ptr의 값을 성공적으로 증가시키는 경우 (내가 의심하는) 동일한 구문의 코드를 찾을 수없는 이유는 무엇입니까? 나는 여기에 상당히 사소한 것을 놓치고 있다고 생각합니다 ... 어떤 도움이라도 감사합니다

올리 프로

출력에 따라 주소 int가 해당 크기 인 32 비트 시스템 용으로 컴파일하는 것으로 보입니다 .

*ptr해당 유형이 int값을 증가 시키면 단순히 1을 더합니다.

*ptr로 확인이 int*다음에 의해 증가됩니다 sizeof(int)우리는 바이트의 숫자로 주소를 증가시켜야하므로이 경우에는 현재 주소의 값이 4 바이트이기 때문 있음을 int소비하는 다음 INT에서 우린 가리키는 있도록. 이 작업은 실제로 후속 주소에 메모리를 할당 한 경우에만 유효합니다.

일반적으로 T**수신자가 가리키는 주소를 수정해야 할 때 a를 전달합니다. 예를 들어 수신자 malloc()가 포인터에 대한 공간을 할당하기 위해 a 수행합니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

포인터에 대한 포인터 전달 vs C에서 초기화를위한 포인터 전달

분류에서Dev

고정 크기 배열에 대한 포인터의 주소를 C의 포인터에 대한 포인터를 예상하는 함수에 전달할 수없는 이유는 무엇입니까?

분류에서Dev

포인터를 전달할 때와 포인터의 메모리 주소를 전달할 때

분류에서Dev

C ++ : 포인터, 대상 주소 찾기?

분류에서Dev

인수로 전달 될 때 함수의 포인터 주소 업데이트. [포인터를 C에서 참조로 전달]

분류에서Dev

C의 함수에서 배열에 대한 포인터 전달

분류에서Dev

함수에 대한 포인터에 대한 포인터 전달

분류에서Dev

배열의 요소를 C 함수의 포인터로 전달

분류에서Dev

Swift에서 C API의 인수에 포인터 주소를 전달하는 방법은 무엇입니까?

분류에서Dev

포인터에 대한 C ++ 포인터 및 포인터에 대한 포인터를받는 함수 호출

분류에서Dev

포인터에 대한 C ++ 포인터 및 포인터에 대한 포인터를받는 함수 호출

분류에서Dev

C ++ : 포인터와 주소

분류에서Dev

배열 요소의 주소에 대한 포인터

분류에서Dev

함수에 대한 포인터 전달

분류에서Dev

포인터에 대한 참조 전달

분류에서Dev

포인터에 대한 참조 전달

분류에서Dev

포인터에 대한 참조 전달

분류에서Dev

문자열에 대한 포인터의 C 배열, 포인터에서 문자열 전달

분류에서Dev

포인터 주소를 다른 포인터로 전달하려고합니다.

분류에서Dev

C에서 함수에 대한 포인터 전달시 혼란

분류에서Dev

포인터에 주소를 전달할 수 없습니다.

분류에서Dev

왜 char 포인터를 인쇄하면 포인터의 메모리 주소 대신 전체 배열이 생성됩니까?

분류에서Dev

생성자의 배열에 대한 포인터 전달

분류에서Dev

생성자의 배열에 대한 포인터 전달

분류에서Dev

char 주소에 대한 포인터의 값

분류에서Dev

주소에 대한 함수 포인터 (C ++)

분류에서Dev

함수에 대한 템플릿의 순간 주소를 함수에 대한 포인터로 전달할 수 있습니까?

분류에서Dev

const char에 대한 포인터에 대한 주소의 데이터 유형

분류에서Dev

이중 포인터를받는 함수에 고유 포인터의 포인터 전달

Related 관련 기사

  1. 1

    포인터에 대한 포인터 전달 vs C에서 초기화를위한 포인터 전달

  2. 2

    고정 크기 배열에 대한 포인터의 주소를 C의 포인터에 대한 포인터를 예상하는 함수에 전달할 수없는 이유는 무엇입니까?

  3. 3

    포인터를 전달할 때와 포인터의 메모리 주소를 전달할 때

  4. 4

    C ++ : 포인터, 대상 주소 찾기?

  5. 5

    인수로 전달 될 때 함수의 포인터 주소 업데이트. [포인터를 C에서 참조로 전달]

  6. 6

    C의 함수에서 배열에 대한 포인터 전달

  7. 7

    함수에 대한 포인터에 대한 포인터 전달

  8. 8

    배열의 요소를 C 함수의 포인터로 전달

  9. 9

    Swift에서 C API의 인수에 포인터 주소를 전달하는 방법은 무엇입니까?

  10. 10

    포인터에 대한 C ++ 포인터 및 포인터에 대한 포인터를받는 함수 호출

  11. 11

    포인터에 대한 C ++ 포인터 및 포인터에 대한 포인터를받는 함수 호출

  12. 12

    C ++ : 포인터와 주소

  13. 13

    배열 요소의 주소에 대한 포인터

  14. 14

    함수에 대한 포인터 전달

  15. 15

    포인터에 대한 참조 전달

  16. 16

    포인터에 대한 참조 전달

  17. 17

    포인터에 대한 참조 전달

  18. 18

    문자열에 대한 포인터의 C 배열, 포인터에서 문자열 전달

  19. 19

    포인터 주소를 다른 포인터로 전달하려고합니다.

  20. 20

    C에서 함수에 대한 포인터 전달시 혼란

  21. 21

    포인터에 주소를 전달할 수 없습니다.

  22. 22

    왜 char 포인터를 인쇄하면 포인터의 메모리 주소 대신 전체 배열이 생성됩니까?

  23. 23

    생성자의 배열에 대한 포인터 전달

  24. 24

    생성자의 배열에 대한 포인터 전달

  25. 25

    char 주소에 대한 포인터의 값

  26. 26

    주소에 대한 함수 포인터 (C ++)

  27. 27

    함수에 대한 템플릿의 순간 주소를 함수에 대한 포인터로 전달할 수 있습니까?

  28. 28

    const char에 대한 포인터에 대한 주소의 데이터 유형

  29. 29

    이중 포인터를받는 함수에 고유 포인터의 포인터 전달

뜨겁다태그

보관