실기 예상문제 258페이지 15번 문제입니다
void에서 계산된건 그 곳을 빠져나오는 순간 계산식이 적용이 안된다고 설명을 들엇는데
왜 이 문제에서는 void prnt를 빠져나왓는데 printf에서 a, b 값이 void안에 값으로 출력이 되는건가요?
답이 a=40, b=20, c=50 이라고 되어있는데 void값이 적용이 안되서 a=10, b=20, c=50해야하는거 아닌건가요?
너무 햇갈립니다. 자세한 설명좀 부탁드립니다.
249페이지 7번문제는 똑같은 void문제인데 반환하지 않아서 적용안되서 그대로 출력된다고 설명하시고 258페이지 15번에서는 적용이 되서 출력값이 변하고
어떤기준인건가요?
안녕하세요 길벗수험서 운영팀입니다.
함수에 '값'을 전달하고 '값'을 돌려 받는 경우
void의 경우 전달받을 수는 있으나 돌려 줄 수가 없으므로(return 사용 불가능) main()에 영향을 줄 수가 없습니다.
반면 '주소'를 전달하는 경우가 있습니다.
이 경우 void이든 int이든 반환 자료형에 상관없이 함수 내에서 메모리에 저장된 값을 직접 건드리게 되므로 함수에서의 변경값이 main()에서도 그대로 적용됩니다.
15번은 주소를 전달한 경우 입니다.
객체 변수, 배열, 구조체 등의 '변수명'은 해당 데이터들이 모여있는 메모리의 시작값을 저장하고 있으므로 문제에서의 prnt(myVar)는 myVar 객체변수의 시작 주소를 prnt에 전달하게 되고
전달받은 주소를 기반으로 prnt 함수에서 메모리 값의 직접 변경이 이루어져 이것이 이후 main()의 printf문에도 그대로 적용된 것입니다.
행복한 하루되세요 :)
-
관리자2022-02-16 10:04:38
안녕하세요 길벗수험서 운영팀입니다.
함수에 '값'을 전달하고 '값'을 돌려 받는 경우
void의 경우 전달받을 수는 있으나 돌려 줄 수가 없으므로(return 사용 불가능) main()에 영향을 줄 수가 없습니다.
반면 '주소'를 전달하는 경우가 있습니다.
이 경우 void이든 int이든 반환 자료형에 상관없이 함수 내에서 메모리에 저장된 값을 직접 건드리게 되므로 함수에서의 변경값이 main()에서도 그대로 적용됩니다.
15번은 주소를 전달한 경우 입니다.
객체 변수, 배열, 구조체 등의 '변수명'은 해당 데이터들이 모여있는 메모리의 시작값을 저장하고 있으므로 문제에서의 prnt(myVar)는 myVar 객체변수의 시작 주소를 prnt에 전달하게 되고
전달받은 주소를 기반으로 prnt 함수에서 메모리 값의 직접 변경이 이루어져 이것이 이후 main()의 printf문에도 그대로 적용된 것입니다.
행복한 하루되세요 :)