#include <stdio.h>
#include <string.h>
int main()
{
int a = 10;
int b = 20;
int c = add(a,b);
}
int add(int n1, int n2){
int n3;
n3 = n1 + n2;
return n3;
}
위의 코드처럼 함수를 호출하면, a와b에 대한 값은 변화 없이 지역변수에 복사만 하고 로직을 수행한다.
이를 Call By Value라고 한다.
CBV를 사용해 코드를 작성하면, 값들을 재사용하기 좋고, 디버깅 할 때도 집중해서 관찰해야 하는 값이 한정되기 때문에 편하다.
Java로 함수를 작성할 때도 CBV형식으로 작성하는 경우가 많았을 것이다.
함수에서 값 대신 포인터를 입력받도록 하면, main함수의 변수에 대해서도 값을 바꿀 수 있다.
C에서 입력은 scanf를 사용하고 출력은 printf를 사용한다.
그런데, 주소 연산자&는 scanf에만 사용하는데 그 이유를 제대로 정리하자.
변수의 값을 변경 할 때는 변수의 주소가 필요하다.
scanf는 사용자로부터 값을 입력받고 변경까지 해야 하기에 주소가 필요하고, printf는 값을 읽기만 하면 되기 때문에주소를 전달할 필요가 없다.
char타입의 배열으로 문자열을 입력받을 때도 &가 없어도 되는데, 배열 자체가 포인터이므로 주소로 직접 찾아가 배열 값을 변경할 수 있기 때문이다.