[C언어 스터디 - 13] 배열을 입력으로 이용하는 함수 (function using array as input)
2020. 7. 3. 11:00ㆍ03. Resources/C, C++
728x90
반응형
C언어 함수 정리
참고 문헌 (Ch 64): https://dojang.io/mod/page/view.php?id=562
배열 매개변수 사용하기
함수의 입력(매개변수)으로 배열을 사용하기 위해서는 입력(매개변수) 이름 뒤에 []를 붙이거나 매개변수를 포인터로 지정해주면 된다.
반환값자료형 함수이름(자료형 매개변수[])
{
}
반환값자료형 함수이름(자료형 *매개변수)
{
}
예시
#include <stdio.h>
void printArray(int arr[], int count) // 배열의 포인터와 요소의 개수를 받음
{
for (int i = 0; i < count; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int numArr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
printArray(numArr, sizeof(numArr) / sizeof(int)); // 배열과 요소의 개수를 넣음
return 0;
}
입력으로 들어오는 arr[]은 배열의 메모리 주소를 담고있는 포인터이기 때문에, 배열의 크기를 입력으로 넣어 주어야 한다.
특히 요소의 개수를 넣어줄 때, 배열의 크기 변화에 대응하기 위해서 sizeof 를 이용해야한다.
또한 arr[]로 입력(매개변수)를 지정한 경우 이는 포인터이기 때문에 배열의 요소를 변경하면 함수 바깥에 있는 배열의 값도 바뀌게 된다.
#include <stdio.h>
void setElement(int arr[]) // 배열의 포인터를 받음
{
arr[2] = 300; // 매개변수로 받은 배열의 요소를 변경
}
int main()
{
int numArr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
setElement(numArr); // 배열을 넣어줌
printf("%d\n", numArr[2]); // 300: setElement에서 변경한 값이 출력됨
return 0;
}
매개변수를 포인터로 지정하면 아래와 같다.
#include <stdio.h>
void printArray(int *arr, int count) // 매개변수를 포인터로 지정하여 배열을 받음
{
for (int i = 0; i < count; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int numArr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
printArray(numArr, sizeof(numArr) / sizeof(int)); // 배열과 요소의 개수를 넣음
return 0;
}
이를 이용하면 함수 안에서 배열의 요소를 바꾸는 함수를 작성할 수 있다.
#include <stdio.h>
void swapElement(int arr[], int first, int second) // 배열의 포인터와 인덱스를 받음
{
int temp;
temp = arr[first];
arr[first] = arr[second];
arr[second] = temp;
}
int main()
{
int numArr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
swapElement(numArr, 0, 1); // 배열과 값을 서로 바꿀 인덱스를 넣음
printf("%d %d\n", numArr[0], numArr[1]); // 2 1: swapElement에 의해서 배열 요소의 값이 서로 바뀜
return 0;
}
2차원 배열 매개변수 사용하기
함수에서 2차원 배열을 매개변수로 사용하려면 매개변수 이름 뒤에 [][가로 크기] 를 붙이고 가로 크기를 지정하거나, 괄호로 묶은 포인터 뒤에 [가로 크기]를 붙인다.
반환값자료형 함수이름(자료형 매개변수[][가로크기])
{
}
반환값자료형 함수이름(자료형 (*매개변수)[가로크기])
{
}
예시 (두 개의 대괄호를 이용한 방법)
#include <stdio.h>
// ↓ 배열의 가로 크기 지정
void print2DArray(int arr[][5], int col, int row) // 2차원 배열의 포인터와 가로, 세로 크기를 받음
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main()
{
int numArr[2][5] = {
{ 1, 2, 3, 4, 5 },
{ 6, 7, 8, 9, 10 }
};
int col = sizeof(numArr[0]) / sizeof(int); // 5: 2차원 배열의 가로 크기를 구할 때는
// 가로 한 줄을 요소의 크기로 나눠줌
int row = sizeof(numArr) / sizeof(numArr[0]); // 2: 2차원 배열의 세로 크기를 구할 때는
// 배열이 차지하는 공간을 가로 한 줄의 크기로 나눠줌
print2DArray(numArr, col, row); // 2차원 배열과 가로, 세로 크기를 넣음
return 0;
}
예시 (포인터와 대괄호를 이용한 방법)
#include <stdio.h>
void print2DArray(int (*arr)[5], int col, int row) // 매개변수를 포인터로 만든 뒤 가로 크기 지정
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main()
{
int numArr[2][5] = {
{ 1, 2, 3, 4, 5 },
{ 6, 7, 8, 9, 10 }
};
int col = sizeof(numArr[0]) / sizeof(int); // 5: 2차원 배열의 가로 크기를 구할 때는
// 가로 한 줄을 요소의 크기로 나눠줌
int row = sizeof(numArr) / sizeof(numArr[0]); // 2: 2차원 배열의 세로 크기를 구할 때는
// 배열이 차지하는 공간을 가로 한 줄의 크기로 나눠줌
print2DArray(numArr, col, row); // 2차원 배열과 가로, 세로 크기를 넣음
return 0;
}
반응형
'03. Resources > C, C++' 카테고리의 다른 글
[C언어 스터디 - 15] 정렬 (sort) (0) | 2020.07.05 |
---|---|
[C언어 스터디 - 14] 구조체를 입력으로 이용하는 함수 (function using struct as input) (0) | 2020.07.04 |
[C언어 스터디 - 12] 포인터를 입력으로 이용하는 함수 (function using pointers as inputs) (0) | 2020.07.02 |
[C언어 스터디 - 11] 함수 입력 이용하기 (function input variables) (0) | 2020.07.01 |
[C언어 스터디 - 10] 반환값을 이용하는 함수 (function using return) (0) | 2020.06.30 |