void func(int x, int* y, int* z) {
*y = 2*x;
*z = 3*x;
}
int main() {
int a,b,c;
scanf("%d",&a);
func(a,&b,&c);
printf("y:%d z:%d",b,c);
}
입력받은 값의 2배,3배를 call-by-refer로 넘겨주는 예제인데
x만 인자로 받는건데 왜 y,z까지 넘겨받는건지 모르겠습니다.
x만 인자로 받고 func{}안에 int *y=2*x 이렇게 하는건 안되나요?
해당 댓글은 삭제되었습니다.
수학으로 치면 f(x) = 2x 니까 y를 받으려면 x만 입력하면 되는건데 여기서는 왜 y까지 넘겨주는건가요?
제얘기는 그냥 x가 인풋이고 y,z값은 자동으로 나오는 아웃풋인데 왜 아웃풋까지 함수 인자에 넣는지 모르겠어요
수학으로 치면 f(x)=2x가 아니라 f(x,y,z)=2x 이런느낌?
매칭을 시켜주기 위해 y,z를 인자로 넣어준단 말씀이시죠? y,z를 정의역으로 넣는게 아니라?
수학으로 치면 y 만 바꿀때 함수 리턴값으로 f(x) = 2x 형태가 되는데
y 랑 z 를 한 함수에서 같이 바꿀려면 주소를 알려줘서 접근하게 해야합니다 함수안에서 *y, *z 는 main의변수 b, c의 주소를 받으면서 초기화되기땜에 역참조로 접근해서 값을 바꾸는것
음 무슨말인지 조금 이해되는거같아요 감사합니다
저 함수에 y,z를 선언하는거는 함수의 인자로 쓰는게 아니라 주소를 알려주기위해 선언한다는 말씀이 맞나요?
네 사실 현실수학의 함수처럼 할려면 main에서 a = func(b); 이런식으로 리턴값을 대입하는 꼴로 코딩해야 들어맞게 되죠
근데 본문의 함수를 수학처럼 하고싶으면 목적상 b, c = func(a); 이렇게 해야하는건데, 사실 이건 현실의 함수도 아닌게 되는거라
본문함수는 게다가 리턴값이 없는 void 형이니까, 포인터라는 메모리주소를 던져주고 함수몸체에서 거기다 값을 직접(역참조) 넣어라 이런느낌으로 생각하는게 편하더라구요. 머 이런 이유에서도 여러 책에서 function 이라는 명칭보다 subprogram , method 라고 하는거같아요
던져주고 넣어라라는 말씀 들으니까 딱 이해가 가네요 설명해주셔서 감사합니다
디씨 댓글이 엔터치는게 안돼서 말이정리가 잘 안되는데 하튼 결론은 본문함수의 y, z 선언은 일단 인자면서 변수(포인터도 변수)이긴한데(컴터의 method입장에서), 현싱에서릐 수학 함수 인자의 목적은 아니고 그냥 주소알리기 위한것입니다