핌이의 일상

Programming/C

[C] 배열과 포인터

핌이 (Pimgrim) 2023. 12. 23. 01:58

아래 예시는 2 * 2 배열을 생성한 뒤, 포인터를 이용하여 합산하는 코드 입니다. 

#include <stdio.h>

int main() {
    int a[2][2] = {{11, 22}, {44, 55}};  // 2x2 배열 선언 및 초기화
    int i, sum = 0;
    int *p;
    p = a[0];  // 포인터 p를 배열 a의 첫 번째 요소의 주소로 설정

    for (i = 1; i < 4; i++)
        sum += *(p + i);  // 포인터 p를 통해 배열 요소에 접근하여 값을 누적

    printf("%d", sum);  // 누적된 값 출력
    return 0;
}

 

결과:

22 + 44 + 55 = 121

 

1. int a[2][2] = {{11, 22}, {44, 55}};: 2x2 크기의 배열 a를 선언하고 초기화합니다.
2. int *p; p = a[0];: 정수 포인터 p를 선언하고 배열 a의 첫 번째 요소의 주소로 초기화합니다.
3. for (i = 1; i < 4; i++) sum += *(p + i);: 반복문을 통해 배열의 2번째 요소부터 4번째 요소까지의 값을 포인터 p를 통해 참조하여 합산합니다.
4. printf("%d", sum);: 누적된 합계를 출력합니다.

 

포인터는 메모리의 주소를 저장하는 변수로, 다른 변수의 주소를 갖고 있습니다. 이를 통해 해당 변수의 값을 직접 참조하거나 변경할 수 있습니다. 포인터를 이해하기 위해 몇 가지 중요한 개념을 설명하겠습니다.

1. **메모리 주소:**
   - 컴퓨터 메모리는 여러 셀(혹은 바이트)로 나뉘어 있습니다. 각 셀은 고유한 주소를 가지고 있습니다.

2. **포인터 변수 선언:**
   - 포인터 변수는 특별한 형태로 선언되며, 해당 변수의 주소를 저장합니다. 선언할 때 데이터 타입을 명시해야 합니다.

     

int *ptr; // int 형 변수를 가리키는 포인터 선언



3. **& 연산자 (주소 연산자):**
   - 변수의 주소를 알아내기 위해 `&` 연산자를 사용합니다.

     

int x = 10;
int *ptr = &x; // x의 주소를 ptr에 저장



4. **포인터를 통한 값 참조:**
   - 포인터를 사용하여 해당 주소에 저장된 값을 읽을 수 있습니다.

     

int value = *ptr; // ptr이 가리키는 주소의 값을 읽어서 value에 저장



5. **포인터를 통한 값 변경:**
   - 포인터를 사용하여 해당 주소에 저장된 값을 수정할 수 있습니다.

     

*ptr = 20; // ptr이 가리키는 주소의 값을 20으로 변경



포인터는 복잡한 데이터 구조, 동적 메모리 할당 등의 상황에서 유용하게 사용됩니다. 이해를 돕기 위해 간단한 변수의 주소를 가리키는 예제를 통해 포인터의 기본 개념을 설명했습니다.

반응형