스스로 C를 공부하면서 항상 어려움을 겪는 것이 함수에 배열을 매개변수로 배열을 주는 것과 배열을 리턴하는 것이 어려워서 실수하고 에러를 자주 접한다.
이를 제대로 공부하기 위해 배열을 반환하는 것을 포스팅하려고 한다.
#include <stdio.h>
int * makeArray() {
static int array[3] = {1,2,3};
return array;
} // 배열을 return 하기 위해서는 배열을 static으로 선언해야 한다.
int main() {
int * arr = makeArray();
for (int i=0; i<3; i++) {
printf("%d ", arr[i]);
}
return 0;
}
>>> 1 2 3
#include <stdio.h>
int * makeArray2() {
static int array[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
return (int*) array;
}
int main() {
int * arr = makeArray2() {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf("%d ", *(nums+i*3+j));
} printf("/ ");
}
}
>>> 1 2 3 / 4 5 6 / 7 8 9
#include <stdio.h>
int * makeArray2() {
static int array[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
return (int*) array;
}
int main() {
int (*arr)[3] = (void*)makeArray2() {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf("%d ", array[i][j]);
} printf("/ ");
}
}
>>> 1 2 3 / 4 5 6 / 7 8 9
#include <stdio.h>
void * makeArray2() {
static int array[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
return (void*) array;
}
int main() {
int (*arr)[3] = makeArray2() {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf("%d ", array[i][j]);
} printf("/ ");
}
}
>>> 1 2 3 / 4 5 6 / 7 8 9
#include <stdio.h>
void printArr(int arr[3]) {
for (int i=0; i<3; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int arr[] = {1, 2, 3};
printArr(arr);
}
>>> 1 2 3
#include <stdio.h>
void printArr(int arr[]) {
for (int i=0; i<3; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int arr[] = {1, 2, 3};
printArr(arr);
}
>>> 1 2 3
#include <stdio.h>
void printArr(int * arr) {
for (int i=0; i<3; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int arr[] = {1, 2, 3};
printArr(arr);
}
>>> 1 2 3
#include <stdio.h>
void printArr(void * arr) {
for (int i=0; i<3; i++) {
printf("%d ", ((int*)arr)[i]);
}
}
int main() {
int arr[] = {1, 2, 3};
printArr(arr);
}
>>> 1 2 3
#include <stdio.h>
void printArr(int arr[3][3]) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf("%d ", arr[i][j]);
} printf("/ ");
}
}
int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
printArr(arr);
}
>>> 1 2 3 / 4 5 6 / 7 8 9
#include <stdio.h>
void printArr(int arr[][3]) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf("%d ", arr[i][j]);
} printf("/ ");
}
}
int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
printArr(arr);
}
>>> 1 2 3 / 4 5 6 / 7 8 9
#include <stdio.h>
void printArr(int (*arr)[3]) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf("%d ", arr[i][j]);
} printf("/ ");
}
}
int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
printArr(arr);
}
>>> 1 2 3 / 4 5 6 / 7 8 9
#include <stdio.h>
void printArr(int *arr) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf("%d ", *(arr+i*3+j));
} printf("/ ");
}
}
int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
printArr(arr);
}
>>> 1 2 3 / 4 5 6 / 7 8 9
#include <stdio.h>
void printArr(int * arr) {
int (*brr)[3] = (void*) arr;
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf("%d ", brr[i][j]);
} printf("/ ");
}
}
int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
printArr(arr);
}
>>> 1 2 3 / 4 5 6 / 7 8 9
#include <stdio.h>
void printArr(void * arr) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf("%d ", *((int*)arr+i*3+j));
} printf("/ ");
}
}
int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
printArr(arr);
}
>>> 1 2 3 / 4 5 6 / 7 8 9
#include <stdio.h>
void printArr(void * arr) {
int (*brr)[3] = arr;
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf("%d ", brr[i][j]);
} printf("/ ");
}
}
int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
printArr(arr);
}
>>> 1 2 3 / 4 5 6 / 7 8 9
위 글은 아래 글들을 참조해서 작성했습니다.
C언어 배열 반환하기 - 제타위키
C언어 1차원 배열 파라미터로 넘기기 - 제타위키
C언어 2차원 배열 파라미터로 넘기기 - 제타위키