C언어 배열 리턴과 매개변수

ROK·2022년 7월 20일
1

스스로 C를 공부하면서 항상 어려움을 겪는 것이 함수에 배열을 매개변수로 배열을 주는 것과 배열을 리턴하는 것이 어려워서 실수하고 에러를 자주 접한다.

이를 제대로 공부하기 위해 배열을 반환하는 것을 포스팅하려고 한다.

배열 반환하기

1차원 배열

int*로 받고, 인덱스 접근

#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

2차원 배열

int*로 받고, 포인터 접근

#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

int*로 받고, 인덱스 접근

#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

void*로 받고, 인덱스 접근

#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

배열 파라미터로 넘기기

1차원 배열

int arr[3]

#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

int arr[]

#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

int * arr

#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

void * arr

#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

2차원 배열

int arr[3][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

int arr[][3]

#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

int (*arr)[3]

#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

int * arr (1)

#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

int * arr (2)

#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

void * arr (1)

#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

void * arr (2)

#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차원 배열 파라미터로 넘기기 - 제타위키

profile
하루에 집중하자

0개의 댓글