C | 포인터(Pointer)와, &, * 연산자

성수당·2025년 7월 31일

C언어

목록 보기
1/4
post-thumbnail

🥔 포인터(Pointer)란?

C/C++을 처음 접하면 가장 많이 혼란스러워하는 개념 중 하나가 포인터(pointer)다. 포인터는 단순히 "주소를 저장하는 변수"이지만, 여기에 & 연산자(주소 연산자)* 연산자(역참조 연산자)가 등장하면서 초보자에게는 헷갈리는 지점이 많다.

int a = 10;
int* p = &a;  // p는 a의 주소를 저장

🥔 변수와 메모리 주소

C/C++에서 변수를 선언하면, 해당 변수는 메모리 상의 어떤 공간에 저장된다.

int a = 10;

변수 a는 정수 10을 저장하고, 메모리 어딘가에 존재한다. 이 위치(주소)는 &a를 통해 알 수 있다.

cout << &a << endl;  // 변수 a의 주소 출력

🥔 & 연산자(주소 연산자)

&변수명은 해당 변수의 주소값을 반환한다.

int a = 10;
cout << &a << endl;  // a의 메모리 주소

🥔 * 연산자(역참조 연산자)

*포인터는 포인터가 가리키는 주소에 저장된 값을 참조한다.

int a = 10;
int* p = &a;

cout << *p << endl;  // 10 출력
  • p는 주소 자체

  • *p는 주소에 있는 값

🥔 간단한 예제

int a = 10;
int* p = &a;

cout << a << endl;    // 10
cout << &a << endl;   // 0x100 같은 주소
cout << p << endl;    // &a와 같은 주소
cout << *p << endl;   // 10

🥔 포인터를 이용한 값 변경

포인터를 이용하면 변수의 값을 간접적으로 변경할 수 있다.

void addOne(int* ptr) {
    *ptr += 1;
}

int main() {
    int a = 5;
    addOne(&a);
    cout << a << endl;  // 6 출력
}
  • &a로 주소를 전달

  • *ptr += 1로 해당 주소의 값을 변경

    이것이 바로 Call by Reference

    🥔 배열과 포인터

int arr[3] = {1, 2, 3};
cout << arr << endl;     // arr은 arr[0]의 주소
cout << *arr << endl;    // arr[0]의 값인 1 출력
cout << *(arr + 1) << endl; // arr[1] 값인 2 출력

즉, arr[i] == *(arr + i)

🥔 포인터의 다양한 응용

예시설명
동적 메모리 할당new, malloc
다차원 배열int** 사용
문자열 처리char* 문자열
함수 인자 전달참조(Call by Reference)
구조체 접근-> 연산자 사용 (ptr->member)
profile
말하는 감자🥔

0개의 댓글