포인터와 배열을 활용한 C언어 프로그래밍 예제

다음은 C언어에서 포인터와 배열을 사용하는 다양한 예제들입니다.

  1. 2차원 배열과 포인터를 이용한 요소 접근 및 출력
#include <stdio.h>

int main() {
    int arr[3][4] = {0};
    int (*ptr)[4] = arr;

    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 4; ++j) {
            arr[i][j] = i * 4 + j + 1;
            printf("%d ", *(ptr[i] + j));
        }
        printf("\n");
    }
}
  1. N*N 크기의 나선형 행렬 생성
#include <stdio.h>

void spiralMatrix(int N) {
    int matrix[N][N], val = 1, top = 0, bottom = N - 1, left = 0, right = N - 1;

    while (top <= bottom && left <= right) {
        for (int i = left; i <= right; ++i) matrix[top][i] = val++;
        top++;
        for (int i = top; i <= bottom; ++i) matrix[i][right] = val++;
        right--;
        if (top <= bottom) {
            for (int i = right; i >= left; --i) matrix[bottom][i] = val++;
            bottom--;
        }
        if (left <= right) {
            for (int i = bottom; i >= top; --i) matrix[i][left] = val++;
            left++;
        }
    }

    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) printf("%3d", matrix[i][j]);
        printf("\n");
    }
}

int main() {
    int N = 5;
    spiralMatrix(N);
}
  1. 학생들의 성적 총합 계산 함수 작성
#include <stdio.h>

void calcTotalScores(int n, float scores[][8]) {
    for (int i = 0; i < n; ++i) {
        scores[i][0] = 0;
        for (int j = 1; j <= 7; ++j) scores[i][0] += scores[i][j];
    }
}

int main() {
    int n = 3;
    float scores[3][8] = {{0, 89, 78, 92, 85, 96, 88, 91},
                          {0, 76, 85, 90, 88, 79, 81, 84},
                          {0, 90, 88, 93, 91, 87, 95, 92}};
    calcTotalScores(n, scores);

    for (int i = 0; i < n; ++i) printf("Student %d Total: %.2f\n", i + 1, scores[i][0]);
}
  1. 변수 선언의 의미 설명 a) int a; - 정수 변수 a 선언 b) int *a; - 정수 포인터 변수 a 선언 c) int **a; - 이중 포인터 변수 a 선언 d) int a[10]; - 크기가 10인 정수 배열 a 선언 e) int (*a)[10]; - 크기가 10인 정수 배열을 가리키는 포인터 a 선언

  2. 2차원 배열 복사

#include <stdio.h>

void copyArray(int src[][4], int dest[][4], int rows, int cols) {
    for (int i = 0; i < rows; ++i)
        for (int j = 0; j < cols; ++j)
            dest[i][j] = src[i][j];
}

int main() {
    int src[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    int dest[3][4];
    copyArray(src, dest, 3, 4);

    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 4; ++j) printf("%d ", dest[i][j]);
        printf("\n");
    }
}
  1. 문자열 길이 반환 함수 작성
#include <stdio.h>

int stringLength(char *str) {
    int len = 0;
    while (*(str + len) != '\0') len++;
    return len;
}

int main() {
    char str[] = "HelloWorld";
    printf("Length of the string is %d\n", stringLength(str));
}
  1. sizeof 연산자로 배열과 포인터 크기 출력
#include <stdio.h>

int main() {
    int arr[3][4] = {0};
    printf("%zu\n", sizeof(arr)); // 전체 배열 크기
    printf("%zu\n", sizeof(arr[0][0])); // 단일 요소 크기
    printf("%zu\n", sizeof(arr[0])); // 첫 번째 행 크기
    printf("%zu\n", sizeof(arr[0] + 1)); // 포인터 크기
    printf("%zu\n", sizeof(*(arr[0] + 1))); // 단일 요소 크기
    printf("%zu\n", sizeof(arr + 1)); // 포인터 크기
    printf("%zu\n", sizeof(*(arr + 1))); // 첫 번째 행 크기
    printf("%zu\n", sizeof(&arr[0] + 1)); // 포인터 크기
    printf("%zu\n", sizeof(*(&arr[0] + 1))); // 첫 번째 행 크기
    printf("%zu\n", sizeof(*arr)); // 첫 번째 행 크기
    printf("%zu\n", sizeof(arr[3])); // 경고 발생 가능
}

태그: C 포인터 배열 문자열 함수

7월 11일 03:04에 게시됨