10. 포인터

2025. 11. 21. 17:24·Coding/C
  • 메모리 / 주소

- 메모리는 byte 단위로 나누어져 있음

- 각 byte는 고유한 주소를 가짐

 

변수는 여러 바이트에 저장 > 변수가 저장된 메모리의 시작 주소 = 변수의 주소

 

  • 포인터 변수 : 변수(객체)의 주소를 저장하는 변수
  • 포인터 연산자

- 주소 연산자 (&) : &변수명 = 해당 변수의 메모리 주소 반환

- 간접 연산자 (*) : 선언 - 해당 변수가 포인터임을 나타냄 // 사용 - 해당 포인터가 가리키는 주소의 실제 값 (값의 복사본 X)

 

  • 값에 의한 전달 (Call by value)
#include <stdio.h>

void swap(int p, int q) {
    printf("Before swap: p = %d, q = %d\n", p, q);
    
    int temp = p;
    p = q;
    q = temp;
    printf("After swap: p = %d, q = %d\n", p, q);
}

int main() {
    int i = 10;
    int j = 20;

    printf("Before swap: i = %d, j = %d\n", i, j);
    
    printf("\n");
    swap(i, j);
    printf("\n");
    printf("After swap: i = %d, j = %d", i, j);

    return 0;
}
Before swap: i = 10, j = 20

Before swap: p = 10, q = 20
After swap: p = 20, q = 10
// swap 함수 안에서는 유효

After swap: i = 10, j = 20
// 함수에 값의 복사본이 인수로 전달되었으므로, 함수 밖 변수의 원본은 바뀌지 않음

 

  • 참조에 의한 전달 (Call by reference)
#include <stdio.h>

void swap(int *p, int *q) { // 선언 - 매개변수 p, q는 int형 포인터 변수(주소)
    printf("Before swap: p = %d, q = %d\n", *p, *q); // 사용 - 포인터 변수 p, q의 값(주소X)
    
    int temp = *p;
    *p = *q;
    *q = temp;
    printf("After swap: p = %d, q = %d\n", p, q);
}

int main() {
    int i = 10;
    int j = 20;

    printf("Before swap: i = %d, j = %d\n", i, j);
    
    printf("\n");
    swap(&i, &j); // 인수의 형식(포인터 변수 = 주소)에 맞게 전달
    printf("\n");
    printf("After swap: i = %d, j = %d", i, j);

    return 0;
}
Before swap: i = 10, j = 20

Before swap: p = 10, q = 20
After swap: p = 20, q = 10

After swap: i = 20, j = 10
// 함수에 값의 주소가 인수로 전달되었으므로, 함수 밖 변수의 원본이 바뀜

 

  • 포인터 반환
int *func(...) { // 함수의 반환형을 포인터로 선언
	int *var;
    ...
    return var;
}

'Coding > C' 카테고리의 다른 글

12. 문자열  (0) 2025.11.29
11. 포인터와 배열  (0) 2025.11.21
09. 변수의 범위와 지속기간  (0) 2025.11.21
08. 함수  (0) 2025.10.17
07. 배열  (0) 2025.10.16
'Coding/C' 카테고리의 다른 글
  • 12. 문자열
  • 11. 포인터와 배열
  • 09. 변수의 범위와 지속기간
  • 08. 함수
rlarudfhr
rlarudfhr
  • rlarudfhr
    androcom
    rlarudfhr
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • Coding (28)
        • Python (10)
        • C (13)
        • Github & Git (2)
        • WEB FE (3)
      • Mathematics (3)
        • 미적분학 (19)
        • 통계학 (16)
        • 선형대수 (10)
      • Quantum Computing (0)
      • PC & Mobile & Audio (7)
      • Etc (13)
  • 링크

    • Github
    • Baekjoon
    • Instagram
  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
rlarudfhr
10. 포인터
상단으로

티스토리툴바