C 언어 포인터를 이해하는 간단한 예 ~ 누구나 알 수있는 포인터의 장점 ~

8389 단어 C++C포인터

포인터를 이해하는 단계


  • 값 및 참조 정보
  • 함수 인수 정보
  • 인스턴스 정보
  • 포인터가 없는 경우와 있는 경우의 샘플 코드
  • 요약

  • 값 및 참조 정보



    메모리의 데이터는
  • 주소 -> 1000 ~ 1003
  • 값 -> 메모리 내용

  • 이 두 가지로 구성된 이미지입니다.

    【C언어】포인터

    주소를 참조
    값을 값
    라고 부르는 것이 일반적입니다.

    함수 인수 정보



    C 언어에서는 함수 인수에 값만 전달할 수 있습니다.
    그래서 함수의 인수에 인스턴스를 건네주고 그 인스턴스에 함수 내에서 변경을 하기 위해서는 포인터라는 주소를 값으로 취급하는 변수가 필요합니다! ! ! (여기 중요)

    포인터가 없는 경우와 있는 경우의 샘플 코드



    Main.c
    #include <stdio.h>
    typedef struct list {
        int first;
        int second;
        int sum;
        int sub;
    } list;
    
    // ポインタなしの関数
    void sum_and_sub(list list) {
        printf("list address in sum(): %d\n", &list);
        list.sum = list.first + list.second;
        printf("sum in sum(): %d\n", list.sum);
        list.sub = list.first - list.second;
        printf("sub in sum(): %d\n", list.sub);
    }
    
    // ポインタありの関数
    void sum_and_sub_pointer(list *list) {
        printf("list address in sum_pointer(): %d\n", list);
        list->sum = list->first + list->second;
        printf("sum in sum_pointer(): %d\n", list->sum);
        list->sub = list->first - list->second;
        printf("sub in sum_pointer(): %d\n", list->sub);
    }
    
    int main(void) {
        struct list list1;
        list1.first = 1;
        list1.second = 5;
        list1.sum = 0;
        list1.sub = 0;
        printf("list1 address in main(): %d\n", &list1);
        sum_and_sub(list1);
        printf("sum by sum(): %d\n", list1.sum);
        printf("sub by sum(): %d\n", list1.sub);
        sum_and_sub_pointer(&list1);
        printf("sum by sum_pointer: %d\n", list1.sum);
        printf("sub by sum_pointer: %d\n", list1.sub);
    }
    
    list1 address in main(): -1886710432
    list address in sum(): -1886710416
    sum in sum(): 6
    sub in sum(): -4
    sum by sum(): 0
    sub by sum(): 0
    list address in sum_pointer(): -1886710432
    sum in sum_pointer(): 6
    sub in sum_pointer(): -4
    sum by sum_pointer: 6
    sub by sum_pointer: -4
    

    sum 함수는 호출자에 의해 정의된 .first , .second 를 받을 수 있습니다.
    하지만 sum 함수 내에서 .total 에 할당된 값을 호출한 main 함수에서 참조할 수 없습니다.

    sum_pointer 함수에서 sum_pointer 함수 내에서 .total 에 할당된 값을 호출한 main 함수에서 참조할 수 있었습니다 ~~

    주소가 제대로 전달되었음을 알 수 있습니다.

    요약



    인스턴스 내용을 업데이트하고 싶다면 포인터를 사용할 수 있습니다.

    보충



    매우 매우 쉽게 포인터의 장점, 개념을 설명하는 기사입니다. 그 밖에도 가득한 장점이 있습니다.
    - 반환값이 하나이지만, 복수의 값을 인스턴스내에 보관 유지해, 예호원에게 반환할 수 있다
    - 메모리 절약

    등등
    자세한 것은 다른 기사를 봐주세요!

    좋은 웹페이지 즐겨찾기