안녕하세요 ! 초보개발자 입니다.
이 블로그는 개인 공부 정리용 블로그 입니다.
혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.
그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.
그럼 시작하도록 하겠습니다.
배열과 매개변수
매개변수를 통해 배열을 전달하려고 할 때 매개변수의 타입을 배열로 하면 됩니다. 하지만 이는 성능상 문제가 있습니다. 왜냐하면 배열의 크기가 작으면 상관 없지만 배열의 크기가 클 경우에는 시간이 아주 오래 걸릴 수 있습니다. 그렇기 때문에 매개변수로 배열을 넘겨주는 것 보다 배열의 주소만 넘겨주게 되면 성능적으로 매우 효율적이고 메모리도 많이 절약 할 수 있습니다. 예를 들면 다음과 같이 할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include<stdio.h> int sumArr(int *pArr) { int sum = 0; return sum; } int main(void) { int arr[5]; int add = sumArr(arr); return 0; } | cs |
위의 코드에서 보는 것 처럼 sumArr 함수를 호출하면서 배열의 주소를 넘겨 줄 수 있습니다. 그렇기 때문에 pArr에는 배열의 주소가 들어가기 때문에 sumArr함수에서도 main함수의 배열 arr을 이용할 수 있습니다.
*매개변수의 타입이 포인터인 경우에는 다음과 같이 '*' 기호 대신 []를 쓰는것이 가능합니다.
ex) int sumArr(int *pArr){...} -> int sumArr(int pArr[]){...}
매개 변수로 배열의 주소를 받았지만 배열의 길이는 어떻게 해야 할까요 ?
이전에 배열에서 배웠던 것처럼 sizeof(arr)/sizeof(arr[0]) 을 이용하여 배열의 길이를 구할 것이라고 생각할 수 있지만 여기서는 포인터의 크기를 반환합니다. 그렇기 때문에 매개 변수로 배열의 길이도 받아와야 합니다.
예제를 통해서 위에서 배운 것을 활용하여 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include<stdio.h> int sumArr(int *pArr,int length) { int sum = 0; for (int i = 0; i < length; i++) { sum += *pArr++; } return sum; } int main(void) { int arr[5] = { 1,2,3,4,5 }; int length = sizeof(arr) / sizeof(arr[0]); int add = sumArr(arr,length); printf("add = %d\n", add); return 0; } | cs |
이상으로 배열과 매개변수에 대해서 알아 보았습니다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어] 동적메모리 할당의 해제 (0) | 2017.05.17 |
---|---|
[C언어] 동적 메모리 할당 (0) | 2017.05.16 |
[C언어] 포인터(9) - 함수와 포인터(값에 의한 호출, 참조에 의한 호출) (1) | 2017.05.11 |
[C언어] 포인터(8) - 포인터와 문자열 (1) | 2017.05.05 |
[C언어] 포인터(7) -void 포인터와 NULL (1) | 2017.05.03 |