Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

냥집사의 개발일지

C언어 - 포인터 (Pointer) : 포인터를 사용하는 이유 (1) 본문

C언어

C언어 - 포인터 (Pointer) : 포인터를 사용하는 이유 (1)

깅햄찌 2022. 9. 10. 14:26
반응형

안녕하세요 오늘은 포인터를 사용하는 여러 가지 이유 中

함수 간에 효과적으로 데이터를 공유하는 장점에 대해 알아보겠습니다. 

 

포인터를 배울때 가장 쉽게 접할 수 있는 SWAP 함수를 통해 정리해봅시다~

swap 함수는 포인터 2개를 인수로 받아 각각의 포인터가 가리키는 값을 바꾸어 저장하는 기능을 합니다.

코드 정리

1, a변수에 3을 저장하고 포인터 pa가 a를 가리키도록 합니다.  

2. b변수에 7을 저장하고 포인터 pb가 b를 가리키도록 합니다. 

3. swap 함수를 통해  pa와 pb가 가리키는 변수를 바꾸어줍니다. 

#include <stdio.h>

void swap(int* p1, int* p2){
    int temp;
    temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

int main(){
    int a = 3;
    int b = 7;
    int* pa = &a;
    int* pb = &b;
    printf("before swap\n");
    printf("a : %d\n",a);
    printf("b : %d\n",b);

    swap(pa,pb);

    printf("after swap\n");
    printf("a : %d\n",a);
    printf("b : %d\n",b);
    return 0;
}

위의 코드의 결과는 예상대로

swap 함수를 통과하기 전 a : 3, b : 7

swap 함수를 통과한 후 a : 7, b : 3

인 것을 확인할 수 있었습니다. 

 

이때 포인터 없이 변수의 값을 swap 함수의 인수로 하면 되지 않을까?라는 생각이 들기도 하는데요.

하지만!! swap 함수 안에서 선언된 변수들은 main 함수 안에서는 접근할 수 없으므로 swap가 되지 않습니다. 

#include <stdio.h>

void swap(int c, int d){
    int temp;
    temp = c;
    c = d;
    d = temp;

}

int main(){
    int a = 3;
    int b = 7;
    
    printf("before swap\n"); 
    printf("a : %d\n",a);
    printf("b : %d\n",b);

    swap(a,b);

    printf("after swap\n");
    printf("a : %d\n",a);
    printf("b : %d\n",b);
    return 0;
}

아래 결과 처럼 값이 바뀌지 않은 것을 확인할 수 있습니다. 

 

이처럼 포인터는 어렵지만 한 번 이해해두면 코딩의 범위가 넓어지고 효율적인 코딩이 가능합니다. 

다음 포스팅에서는 배열과 포인터의 관계에 대해 자세히 정리해보겠습니다. 

 

좋은 하루 보내세요~~

Comments