[C++] 포인터 개념

zzwon1212·2023년 10월 21일

무제

목록 보기
4/7

ChatGPT

"포인터란?"

"포인터는 프로그래밍 언어에서 메모리 주소를 저장하고 참조하는 변수입니다. 메모리 주소는 컴퓨터의 랜덤 액세스 메모리(RAM)에서 데이터 또는 객체의 위치를 가리킵니다. 포인터 변수는 이러한 메모리 주소를 저장하거나 다룰 때 사용됩니다.

포인터의 주요 역할은 다음과 같습니다:

메모리 주소 저장: 포인터는 변수, 배열, 구조체 등의 데이터나 객체의 메모리 주소를 저장합니다.

간접 참조: 포인터를 사용하여 메모리 주소로 이동하고 해당 위치의 데이터를 읽거나 수정할 수 있습니다. 이를 "포인터를 통한 간접 참조"라고 합니다.

동적 메모리 할당: 동적으로 메모리를 할당하고 해제할 때 포인터가 사용됩니다. 동적 메모리 할당을 통해 프로그램 실행 중에 필요한 메모리를 동적으로 할당할 수 있습니다.

배열과 문자열 다루기: 포인터는 배열 요소 또는 문자열의 요소에 접근하는 데 사용됩니다.

함수 포인터: 함수 포인터는 함수의 주소를 저장하고 다른 함수를 호출할 때 사용됩니다."

  • 간단한 예시

    int x = 70
    int *y = &x
    • 값: x = *y
    • 주소: &x = y
  • 포인터를 사용하여 두 값을 서로 바꾸어 보자.

    #include <stdio.h>
    
    void swap(int *x, int *y)
    {
        int tmp;
        tmp = *x;		// *x: 포인터 x가 가리키는 값
        *x = *y;
        *y = tmp;
    }
    
    int main(void)
    {
        int x = 1;
        int y = 2;
        swap(&x, &y);	// &x: x의 주소
        printf("x = %d, y = %d", x, y);
        return 0;
    }
    > x = 2, y = 1
  • 포인터 변수의 값을 바꾸어 보자.

    #include <stdio.h>
    
    int main(void)
    {
        int i = 10;
        int *p;
        p = &i;
        printf("i = %d\n", i);
        *p = 20;
        printf("i = %d\n", i);
        retrun 0;
    }
    > i = 10
    > i = 20
  • 포인터 주소에 1을 더해보자.

    #include <stdio.h>
    
    int main() {
        int numbers[] = {1, 5, 4, 3, 9, 7, 8, 2};
        int* p2 = &numbers[0];
        printf("p2 Points to %d now. \n", *p2);
        return 0;
    }
    > p2 Points 1 now.
    • 포인터가 배열이나 배열의 요소를 가리킬 때만 가능한 방법이다.
    • &numbers[0] 대신에 &numbers를 할당해도 출력값은 동일하다. &numbers가 배열의 첫 번째 요소의 주소를 나타내는 포인터로 취급되기 때문이다.

📙 참고

profile
JUST DO IT.

0개의 댓글