개요
함수의 매개변수로 배열을 전달하는 방법은 변수를 전달하는 방법과는 달라서 헷갈린다. 이번 기회에 확실히 공부하고 넘어가자.
결론부터 말하자면,
함수의 매개변수로 배열을 전달할 때는 call-by-reference 방식 밖에 안된다. call-by-value 방식으로는 전달이 안 된다는 말이다. 왜 그럴까? 변수의 크기는 커봤자 8byte 정도이다. 그걸 계속 복사해서 전달해봤자 메모리에는 큰 영향을 끼치지 않는다. (그래도 무한 루프로 계속 복사하면 큰 영향을 미칠 테니 신경쓰자.) 그런데 만약 크기가 4000byte 인 배열을 계속 복사해서 전달한다면? 금방 메모리가 차버릴 것이다. 그래서 배열은 변수와 다르게 call-by-value 방식으로는 전달할 수 없다.
그래서 방법은
void fnarrc(char arrc[]) {
printf("%c\n", arrc[0]);
}
void fnarrs(char arrs[]) {
printf("%s\n", &arrs[0]);
}
int main(void) {
char arrc[] = { 'H', 'E' };
char arrs[] = { "Hello ", "World!" };
fnarrc(arrc);
fnarrs(arrs);
return 0;
}
위의 예제에서 fnarrc() 의 arrc[0] 부분과 fnarrs() 의 &arrs[0] 의 차이를 스스로 잘 생각해보자.
'컴퓨터' 카테고리의 다른 글
1-2. 함수 오버 로딩(Function Overloading) (0) | 2019.04.04 |
---|---|
1-1. printf와 scanf를 대신하는 입/출력 방식 (0) | 2019.04.04 |
sprintf (0) | 2019.04.01 |
strlen (0) | 2019.04.01 |
문자를 숫자로 바꾸기 (0) | 2019.04.01 |