포인터

2025. 4. 14. 10:14개념 공부

C 언어 포인터 정리

1. 포인터란?

포인터는 어떤 변수의 메모리 주소를 저장하는 변수입니다.

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

2. 기본 문법

  • *p : 포인터 p가 가리키는 주소의 값
  • p : 주소 자체
  • &변수 : 변수의 주소

3. 값 입력 예시 (포인터 사용)

일반 변수와 포인터 변수의 입력 방식 차이

int x;
int *p = &x;

scanf("%d", &x); // 일반 변수는 주소 필요
scanf("%d", p);  // 포인터는 주소를 이미 가지고 있음

4. 배열과 포인터

배열 이름은 배열의 첫 번째 원소의 주소

int arr[5];
int *p = arr;     // arr == &arr[0]
p++;              // 다음 원소로 이동
printf("%d", *p); // 두 번째 원소 출력

5. 포인터로 배열 입력 받기

int ar[50] = {0}, N;
int *p;

scanf("%d", &N);
for (p = ar; p < ar + N; p++) {
    scanf("%d", p); // *p 위치에 입력값 저장
}

6. 포인터로 배열에서 조건 찾기

int count = 0;
for (p = ar; p < ar + N; p++) {
    if (*p == 0) break; // 0이 나오면 멈춤
    count++;
}

7. 함수 매개변수로 포인터 사용

함수에서 값을 바꾸고 싶을 때 포인터를 씀

void modify(int *x) {
    *x += 10;
}

int main() {
    int a = 5;
    modify(&a);   // a의 주소 전달
    printf("%d", a); // 15 출력
}

8. 포인터와 구조체

typedef struct {
    int value;
} Data;

Data d = {10};
Data *p = &d;

printf("%d", p->value); // 구조체 포인터 접근

9. 포인터를 사용한 연결 리스트

typedef struct _node {
    int data;
    struct _node *next;
} Node;

Node *head = NULL;
Node *newNode = malloc(sizeof(Node));
newNode->data = 10;
newNode->next = head;
head = newNode;

10. 정리

  • 일반 변수 → &변수로 주소 전달
  • 포인터 변수 → 이미 주소니까 그대로 사용
  • *포인터 → 주소가 가리키는 값을 읽거나 쓴다
  • 포인터 연산 p++ → 배열처럼 메모리 다음 칸 이동