호빵의 IT 개발소

[C] 포인터 본문

CS(전공지식)/프로그래밍언어

[C] 포인터

호빵Stack 2022. 6. 24. 02:27

포인터

  • 특정 데이터가 저장된 메모리의 주소를 저장하는 변수
  • 다른 곳의 주소 그 자체를 가리키며 이를 응용하여 다양한 연산을 수행
  • 프로그램의 어떠한 위치에서 시행되더라도 특정한 주소를 그대로 이용하기 때문에 값이 즉시 변경됨
// 변수 선언
int x = 10;
int *y = &x;
----------------------
// 변수 출력
y = // x의 주소값
*y = 10
x = 10

 

두 변수의 값을 Swap

#include<stdio.h>

int swap(int *x, int *y)
{
    int tmp;
    tmp = *x;
    *x = *y;
    *y = tmp;
}

int main()
{
    int x = 5;
    int y = 10;
    
    swap(&x, &y);
    printf("x = %d\ny = %d\n", x, y);
    
    return 0;
}
  • main 함수에서 변수 x, y 선언을 합니다. 
  • main 함수에서 swap함수에 x, y의 주소값을 보냅니다.
  • swap 함수에서 임시 변수 tmp를 선언하여 x, y의 포인터 변수(x, y 주소에 있는 값을 가져옴)를 스왑하여 줍니다.
  • main함수에서 x와 y값이 서로 바뀌었는지 확인하기 위해 printf를 통해 출력합니다. 

*포인터를 사용하지 않고 swap을 진행하게 되면 x, y값이 바뀌지 않는데 이유는 x, y가 매개 변수로 swap으로 넘어가 swap함수 내에서만 x, y값 변경이 실행되기 때문에 swap함수가 종료되면 main 함수에는 아무런 영향을 끼치지 않는다.

 

 

포인터 변수의 값을 변경

#include<stdio.h>

int main()
{
    int x = 5;
    int *p;
    
    p = &x;
    printf("x = %d\n", x);
    
    *p = 20;
    printf("x = %d\n", x);
    
    return 0;
}
  • 변수 x와 포인터 변수 p 선언
  • p에 x의 주소값 저장
  • x값 '5' 출력
  • *p 에 20 저장 시 x 주소값에 있는 '5' -> '20'으로 변수 값 변경
  • x값 '20' 출력 

 

 

 

 

 


 

참조 및 출처 :

https://www.youtube.com/watch?v=JsS1A0xwozo

Comments