C언어 배열 반환하기

1 개요[ | ]

C언어 배열 반환하기
C언어 배열 return
  • C언어에서는 배열을 그대로 넘길 수 없고, 포인터로만 넘길 수 있다.
  • 1차원 배열은 포인터와 호환이 잘 되기 때문에 비교적 간단하다.
포인터 연산(+n)과 인덱스 사용([n])이 일치하기 때문이다.
  • 2차원 이상의 배열은 포인터로 넘길 경우, 인덱스를 사용하려면 원래의 배열 구조에 맞추어 변환과정이 필요하다.

2 1차원 배열[ | ]

int*로 받고, 인덱스 접근
#include<stdio.h>
int* getNumbers() {
    static int arr[6] = {1,2,3,4,5,6};
    return arr;
}
int main() {
    int* nums = getNumbers();
    for(int i=0; i<6; i++) printf("%d ", nums[i]);
}

3 2차원 배열[ | ]

int*로 받고, 포인터 접근
#include<stdio.h>
int* getNumbers2() {
    static int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    return (int*) arr;
}
int main() {
    int* nums = getNumbers2();
    for(int i=0; i<3; i++) {
        for(int j=0; j<3; j++) printf("%d ", *(nums+i*3+j));
        printf("| ");
    }
}
int*로 받고, 인덱스 접근
#include<stdio.h>
int* getNumbers2() {
    static int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    return (int*) arr;
}
int main() {
    int (*nums)[3] = (void*)getNumbers2();
    for(int i=0; i<3; i++) {
        for(int j=0; j<3; j++) printf("%d ", nums[i][j]);
        printf("| ");
    }
}
void*로 받고, 인덱스 접근
#include<stdio.h>
void* getNumbers2() {
    static int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    return (void*) arr;
}
int main() {
    int (*nums)[3] = getNumbers2();
    for(int i=0; i<3; i++) {
        for(int j=0; j<3; j++) printf("%d ", nums[i][j]);
        printf("| ");
    }
}

4 3차원 배열[ | ]

int*로 받고, 포인터 접근
#include<stdio.h>
int* getNumbers3() {
    static int arr[2][2][3] = { {{1,2,3},{4,5,6}}, {{7,8,9},{10,11,12}} };
    return (int*) arr;
}
int main() {
    int *nums = getNumbers3();
    for(int i=0; i<2; i++) {
        for(int j=0; j<2; j++) {
            for(int k=0; k<3; k++) printf("%d ", *(nums+6*i+3*j+k));
            printf(", ");
        }
        printf("| ");
    }
}
int*로 받고, 인덱스 접근
#include<stdio.h>
int* getNumbers3() {
    static int arr[2][2][3] = { {{1,2,3},{4,5,6}}, {{7,8,9},{10,11,12}} };
    return (int*) arr;
}
int main() {
    int (*nums)[2][3] = (void*)getNumbers3();
    for(int i=0; i<2; i++) {
        for(int j=0; j<2; j++) {
            for(int k=0; k<3; k++) printf("%d ", nums[i][j][k]);
            printf(", ");
        }
        printf("| ");
    }
}
void*로 받고, 인덱스 접근
#include<stdio.h>
void* getNumbers3() {
    static int arr[2][2][3] = { {{1,2,3},{4,5,6}}, {{7,8,9},{10,11,12}} };
    return (void*) arr;
}
int main() {
    int (*nums)[2][3] = getNumbers3();
    for(int i=0; i<2; i++) {
        for(int j=0; j<2; j++) {
            for(int k=0; k<3; k++) printf("%d ", nums[i][j][k]);
            printf(", ");
        }
        printf("| ");
    }
}

5 같이 보기[ | ]

6 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}