11. 포인터와 배열

2025. 11. 21. 18:17·Coding/C
  • 포인터와 배열의 관계
int arr[10];
int *p;

// 아래의 두 코드는 동일
p = &arr[0];
p = arr; // 배열 이름 자체가 배열의 첫 번째 요소의 메모리 주소를 나타내는 상수

 

  • 포인터 연산

- p++ / p-- : p가 배열을 가리키는 포인터 변수인 경우, 인덱스 이동과 동일 (자료형의 크기만큼 주소 증감)

 

  • 포인터와 다차원 배열
#include <stdio.h>

#define ROW 2
#define COL 2

int main() {
    int arr[ROW][COL] = { {1, 2}, 
                          {3, 4} };
    
    int *p; // 포인터 변수 선언
    for (p = &arr[0][0]; p <= &arr[ROW-1][COL-1]; p++) {
        // p는 arr의 1행 1열을 가리키는 포인터 변수
        printf("%d ", *p); // 여기서의 *p 는 포인터 변수 p가 가리키는 값
    }
    printf("\n");

    int (*q)[COL]; // 길이가 COL인 int 배열을 가리키는 포인터 변수
    for (q = &arr[0]; q <= &arr[ROW-1]; q++) {
        // q는 arr의 n행 1열을 가리키는 포인터 변수
        printf("%d ", *q[0]);
    }
    printf("\n");

    return 0;
};

 

 

+ 함수의 매개변수를 배열로 선언하고자 할 때, int a[]와 int *a는 동일 (배열 전체를 복사해서 전달 X > 배열의 첫 번째 주소를 전달)

 

 

  • 예제

- 버블 정렬

#include <stdio.h>
#include <stdlib.h>

void bubble_sort(int arr[], int n, int (*compare)(int, int)) { // compare는 함수 포인터
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
                if (compare(arr[j], arr[j + 1]) < 0) { // 두 원소의 위치를 바꾸는 동작
                    int temp = arr [j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
            }
        }
    }
}

// 정렬이 필요한 경우 -> 반환값 < 0
int ascending(int a, int b) { // 오름차순
    return (b - a); 
}
int descending(int a, int b) { // 내림차순
    return (a - b);
}

void print_array(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int *arr = NULL;
    int n = 0;
    printf("Enter number of elements: ");
    scanf("%d", &n);
    arr = (int *)malloc(n * sizeof(int)); // 동적 메모리 할당

    printf("Enter %d elements: \n", n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    bubble_sort(arr, n, ascending);

    printf("Sorted array in ascending order: \n");
    print_array(arr, n);

    bubble_sort(arr, n, descending);

    printf("Sorted array in descending order: \n");
    print_array(arr, n);

    free(arr);
    return 0;
}

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

13. 구조체(struct), 열거형(enum), 동적 메모리 할당(malloc), 연결 리스트  (0) 2025.12.15
12. 문자열  (0) 2025.11.29
10. 포인터  (0) 2025.11.21
09. 변수의 범위와 지속기간  (0) 2025.11.21
08. 함수  (0) 2025.10.17
'Coding/C' 카테고리의 다른 글
  • 13. 구조체(struct), 열거형(enum), 동적 메모리 할당(malloc), 연결 리스트
  • 12. 문자열
  • 10. 포인터
  • 09. 변수의 범위와 지속기간
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
11. 포인터와 배열
상단으로

티스토리툴바