깨알 C언어 | 39. 함수에 주소전달 (1) 주소 전달? 포인터를 전달하는 것, call by value? 함수를 호출할 때, 값만 호출하겠다, call by reference? 주소값, 객체, 오브젝트, 배열을 전달하겠다, 문. 1:22 *i? 100 *100? 10 증감식이 우선순이 제일 높다, 답. 5:29
선생님 다행히 값은 어렵지 않게 구했어요! 그런데 51뒤에 띄우고 15쓰는건 "%d " 여기에 스페이스바가 한번 있어서 그런 걸까요? 만약 없이 문제가 나왔다면 5115 21 이게 답일까요? 아 전에 알려주신 IDEone에서 해보니 맞네요 ㅎㅎ 많은것들 알려주셔서 감사합니다
안녕하세요~~~ 주소값을 참조하라는건 f 함수를 호출할때 주소값을 전달했기 때문입니다. ^^ 보면, f( &x, y ); 이런 형태로 되어 있습니다. x 라는 변수에 10이 들어가 있고, x 변수가 메모리의 100번지에 있다고 가정했을때, &x 가 의미하는건 x의 값인 10을 넘기는게 아니라 100번지를 넘기게 됩니다. 그리고 ++j 는 f 함수에서 만들어진 지역변수가 됩니다. 앞에서 y 의 20을 넘기는건 값만 복사해서 새로운 지역변수 j 를 만들어서 전달을 한것이지, y 의 주소를 변경하거나 하진 않습니다. 요거에 관련한 설명은, ruclips.net/video/ilzrAhRJ3BQ/видео.html 이 부분을 먼저 한번 봐주세요~~ 그리고, ruclips.net/video/u_tqrzwotgs/видео.html 이 영상을 한번 더 보시면 이해가 가실꺼에요~~ 혹시라도 이해가 안가시면 다시 질문 남겨주세요~~ 감사합니다. ^^
선생님.... 댓글 보다가 궁금해졌는데 여태 저도 ₩n이 줄 띄우기 인줄 알았는데요.. 그럼 %d뒤에 붙은 ₩n이 의미 하는 게 무엇이죠...??? (전에 배웠는데 까먹은건가...?하핫 죄송ㅎㅎ;;;;) 질문자들도 저처럼 ₩n 때문에 엔터를 친 것이 답이 아닌지 질문 하는 것 같습니다..
안녕하세요~~~ *i += 5; 이건 주소값을 참조해서 그 메모리 영역에 있는걸 바로 바꿔버립니다. 인자를 넘길때, x 의 주소값을 넘기잖아요.. 그리고 함수에서 x의 주소값에다가 값을 대입해버리고, x는 main 에서는 아직 살아있는 변수이기 때문에 x 에 반영이 되어 있습니다. 도움이 되셨음 좋겠습니다. ^^
질문이 있습니다. 함수 호출에서 return을 하고나면 해당 지역변수에 쓰인 부분이 메모리에서 사라진다고 하셨는데요. *i+=5 15 값이 수행될때 return 하기전에 x로 값이 main으로 전달되고 나서 수행되는 부분인지 헷갈립니다. 아니면 return 할때 *i의 값 15랑 * + ++연산한 값이랑 같이 return을 하는 건가요?
안녕하세요. 한국방송통신대 컴퓨터과학과에 편입학 하게되었습니다. 수강과목을 선택해야 하는데 정보처리기사 합격을 위해 필요한 과목으로 C프로그래밍과 Visual C++프로그래밍 중 어떤 과목을 수강하는게 좋을 지 몰라 문의 드립니다. 두 과목중 어떤 과목을 선택해야 할까요?
아니요~~ 첫번째 출력문에서는 51을 출력하고, 개행이나 탭이나 이런 출력관련된 문자가 없기 때문에, 51 출력하고 커서가 껌뻑껌뻑하게 됩니다. 그리고 그 다음 출력문에서 15 20 을 출력하게 되니깐.. 한줄에 쭉 출력이 됩니다~~ 그 다음에 개행이 일어나게 됩니다. 만약 51 15 20 이렇게 하려면 printf("51 "); printf("15 20 "); 이런식으로 해주셔야 합니다. 도움이 되셨으면 좋겠습니다. ^^
❤(5:35 ~ 9:09)
깨알 C언어 | 39. 함수에 주소전달 (1)
주소 전달? 포인터를 전달하는 것,
call by value? 함수를 호출할 때, 값만 호출하겠다,
call by reference? 주소값, 객체, 오브젝트, 배열을 전달하겠다,
문. 1:22
*i? 100
*100? 10
증감식이 우선순이 제일 높다,
답. 5:29
2:30 *i가 주소값을 가져와서 100인데 *i+=5; 에서 *i는 왜 바로 값을 가져오나요??
안녕하세요! 컴응애입니다! 7:50에 나를 호출한 이 공간으로 51를 return을 시킨다고 하셨는데 어디서 나를 호출했는지 어떻게 아나요? 어떤 강의 들으면 나와 있는지 RUclips link 첨부해 주셔도 감사하겠습니다. 항상 감사 드립니다.
포인터 변수를 선언할때 *i 라고 지칭하는데, 이는 단순히 포인터 변수임을 지칭하기 위해 하는것일까요? *i+=5일때는 i가 가리키는 값을 의미해서 이 부분이 헷갈립니다
안녕하세요~~~
포인터 변수를 선언할때 일반변수와 다르게 사용하기 위해서 *i 의 형태를 가지게 됩니다.
그 이후에 사용되는 *i 의 의미는 i 에 있는 주소값이 가리키는 공간의 값이다 라고 생각하시면 됩니다.
i 에는 주소값이 들어가 있게 됩니다.
감사합니다. ^^
@@HeungSsaem 답변 감사합니다!!
50만원씩 돈내고 듣는 컴일강의 듣다가, 혼자 설명하고 혼자 진도 넘어가는 강사때문에 속터져서 유튭뒤지고잇엇는데
이분이 훠어얼씬 낫습니다..! c언어 때문에 막막햇는데 정말 너무너무 높은퀄리티와 이해도를 다갖춘 강의입니다
전산직 준비중인데 이분껄로 준비해보렵니다..!
좋은 댓글 남겨주셔서 너무 감사합니다.
4월에 전산직 시험이 있지요??
얼마 남지 않은 시간 열심히 하셔서 꼭 합격하길 바라겠습니다.
감사합니다. ^^
@@HeungSsaem 네 그런데 정말 c언어랑 자바때문에 몇개월 손놓고잇엇어요.. 선생님꺼듣고 다시 맘먹고 준비해서 6월 지방직 도전하려고 합니다!
@@gavynj1109 아...지방직 준비하시는군요..6월이라면 자바 강의 추가되는게 또 있을꺼에요..
지금은 정보처리 실기 진행해야해서 안되는데, 6월이면 자바랑, SQL문도 진행할 예정이니 그것도 들어주세요~~^^
@@HeungSsaem 네네 컴일은 선생님 유튭강의로도 공부는 충분하겠죵?
@@gavynj1109 컴일까진 아니고 ㅜㅜ
씨언어와 자바는 공무원 문제 기준으로 만든거라서 이정도면 충분하실꺼에요. ^^
선생님 다행히 값은 어렵지 않게 구했어요! 그런데 51뒤에 띄우고 15쓰는건 "%d " 여기에 스페이스바가 한번 있어서 그런 걸까요? 만약 없이 문제가 나왔다면 5115 21 이게 답일까요?
아 전에 알려주신 IDEone에서 해보니 맞네요 ㅎㅎ 많은것들 알려주셔서 감사합니다
안녕하세요~~~
스페이스가 바가 없다면 5115 21 이런식으로 써주시면 됩니다.
근데 스페이스바는 채점하기가 곤란해서 콤마나 그런것들이 출제가 될꺼에요~~
감사합니다. ^^
@@HeungSsaem 감사합니다^^
선생님 주소값을 참조해서 변경해라는 명령은 어디서 받나요??
return은 그뒤쪽에 있는데///
그리고++j는 y의 값을 변경시켜주지 않는것도 궁금하구요...
귀찬게해서 죄송합니다.^^
안녕하세요~~~
주소값을 참조하라는건 f 함수를 호출할때 주소값을 전달했기 때문입니다. ^^
보면, f( &x, y );
이런 형태로 되어 있습니다.
x 라는 변수에 10이 들어가 있고, x 변수가 메모리의 100번지에 있다고 가정했을때, &x 가 의미하는건 x의 값인 10을 넘기는게 아니라 100번지를 넘기게 됩니다.
그리고 ++j 는 f 함수에서 만들어진 지역변수가 됩니다.
앞에서 y 의 20을 넘기는건 값만 복사해서 새로운 지역변수 j 를 만들어서 전달을 한것이지, y 의 주소를 변경하거나 하진 않습니다.
요거에 관련한 설명은,
ruclips.net/video/ilzrAhRJ3BQ/видео.html
이 부분을 먼저 한번 봐주세요~~
그리고,
ruclips.net/video/u_tqrzwotgs/видео.html
이 영상을 한번 더 보시면 이해가 가실꺼에요~~
혹시라도 이해가 안가시면 다시 질문 남겨주세요~~
감사합니다. ^^
흥달샘을 알기전엔 그냥 눈으로 뚫어져라 보면서 이게 뭔말이냐? 라고 생각했는데
잘 모르겠으면 일단 그림을 그려보게되었습니다. 덕분에 예전보다 더 쉽게 풀리네요~
안녕하세요~~
시험에서는 빨리 풀고, 눈으로 푸는게 중요한게 아니라 정확한 답을 찾아내는게 중요하기 때문에 실수를 줄이기 위해서 그림을 꼭 그려주셔야해요..
합격을 진심으로 응원하고 있겠습니다. ^^
실기강의 들으며 틈틈이 깨알 강의 들으니 그림만 그려도 절반은 이해가가네요. 그려가며 푸니 이해도 잘되고 감사합니다.
안녕하세요~~~
그림만 잘 그리면 어려운 문제도 풀 수 있을꺼에요.
실제 개발할때도 모델링을 수행하잖아요~~
이런 시험에 나오는 문제들은 꼭 그림을 그려서 푸는 연습을 해주세요~~
즐거운 주말 되세요~~^^
안녕하세요 출력할때 51 10 20 이나와서 조금 생각해보다가 헷갈려서 질문드립니다
콜바이어드레스는 함수가 종료되는시점이랑 상관없이 주소를통해서
본인의값이 바뀌기떄문에 메인의 x 본인의 값이 바뀐다고 생각하면될까요?
안녕하세요~~~
Call by address 는 함수의 종료와는 상관없이 해당 주소의 값이 바뀐 형태가 됩니다.
x는 해당 변수의 주소값을 넘겼고,
*i += 5;
이 문장에서 기존 x 변수에 있던 10에 5를 더해서 15가 되게 됩니다.
감사합니다. ^^
정보처리기사 이번 3월에 보는데 강의 참고 하겠습니다. 강의 자료는 없나요? 무료 강의해 주셔서 감사합니다.
강의 교안이 없는 점 양해 부탁드릴께요 ㅜㅜ.
선생님.... 댓글 보다가 궁금해졌는데 여태 저도 ₩n이 줄 띄우기 인줄 알았는데요.. 그럼 %d뒤에 붙은 ₩n이 의미 하는 게 무엇이죠...??? (전에 배웠는데 까먹은건가...?하핫 죄송ㅎㅎ;;;;)
질문자들도 저처럼 ₩n 때문에 엔터를 친 것이 답이 아닌지 질문 하는 것 같습니다..
아 다음 강의 듣고 다시 왔는데요 선생님 정확하게 ₩n이 줄 띄움은 맞는데 두 번째 printf 연산 뒤에 붙어있어서
51,15 20
(커서 껌뻑껌뻑)
이렇게 답이 되는 건가요????????????????
넵...한줄 엔터 쳤다고 보시면 됩니다~~
보통 커서까진 답으로 표시하진 않으니 51, 15, 20 이후에 또다른 출력문이 있으면
엔터 치고 답안을 표기해주시면 됩니다~
감사합니다.
오른쪽 함수에서 int j에 대한 변화가 일어나는 식이 있었다면 (값이 40으로 바뀌거나 하는..) 이건 주솟값 참조가 아니니 메인함수로 돌아와서 프린트출력할때 그냥 20으로 출력되나요 ??
안녕하세요..
j는 Call By Value 이기 때문에 값을 복사해서 넘기고, 호출한 곳에는 영향을 미치지 않습니다.
그래서 제어권이 넘어오게 되면 기존 값은 그대로 입니다.
감사합니다. ^^
함수가 끝나고 나면 리턴하는 값을 제외하면 다 소멸한다고 하셨는데 마지막에 *i+=5는 왜 x에 반영되어있나요? 끝까지 듣고 보니 주소값 호출하면 바뀐 채로 남아있는 걸까요? 강의 너무 감사하게 잘 듣고 있습니다🤗
안녕하세요~~~
*i += 5;
이건 주소값을 참조해서 그 메모리 영역에 있는걸 바로 바꿔버립니다.
인자를 넘길때, x 의 주소값을 넘기잖아요..
그리고 함수에서 x의 주소값에다가 값을 대입해버리고,
x는 main 에서는 아직 살아있는 변수이기 때문에 x 에 반영이 되어 있습니다.
도움이 되셨음 좋겠습니다. ^^
질문이 있습니다. 함수 호출에서 return을 하고나면 해당 지역변수에 쓰인 부분이 메모리에서 사라진다고 하셨는데요. *i+=5 15 값이 수행될때 return 하기전에 x로 값이 main으로 전달되고 나서 수행되는 부분인지 헷갈립니다. 아니면 return 할때 *i의 값 15랑 * + ++연산한 값이랑 같이 return을 하는 건가요?
안녕하세요~~~
*i+=5;
이 명령을 수행하면 바로 x 의 값이 변경이 되게 되고,
return 에서는 나를 호출한 그 위치로 연산된 값이 전달이 되는 형태입니다.
순차적으로 처리된다고 생각해주시면 됩니다.
감사합니다. ^^
안녕하세요. 한국방송통신대 컴퓨터과학과에 편입학 하게되었습니다.
수강과목을 선택해야 하는데 정보처리기사 합격을 위해 필요한 과목으로
C프로그래밍과 Visual C++프로그래밍 중 어떤 과목을 수강하는게 좋을 지 몰라 문의 드립니다.
두 과목중 어떤 과목을 선택해야 할까요?
C언어 강의는 인터넷에도 많고, 공부할 방법이 너무너무 많이 있습니다.
무료 강의도 많이 배포가 되어 있고요..
수강시작하기 전에 3월전이 되겠지요..그때 C언어 좀 공부하시면 되고, 수강은 Visual C++ 을 해주시는게 좋을 듯 합니다. ^^
감사합니다 흥달쌤 !
수강해주셔서 감사합니다. ^^
흥달쌤님~! f함수가 끝나고 x값이 계속 15로 유지 되는 이유가 함수로 주소값을 전달해서 그렇다고 하셨잖아요~그럼 위에서 f(*x,y) 말고 f(x,y) 로 인자 값을 받아서 만약 x값이 15로 바뀌게 된다면 f함수가 끝난뒤에도 x값이 15로 계속 유지되나요?
안녕하세요~~~
결론은 아니요~~^^
그냥 값만 전달하게 되면 그냥 f 함수에서 이리저리 처리한다음에 모든게 사라지게 됩니다.
그러니깐 그 값들이 어딘가에 유지가 될수 없습니다.
감사합니다. ^^
수강~ ^^ 시험 얼마 안 남았네요.
어제도 열공하셨군요..
얼마 남지 않은 시험 조금만 힘내주세요..^^
선생님 그러면 결과가 51 이렇게 적어야 되는건가요?? 밑에 printf 뒤에 역슬레쉬 n있어서
15 20
아니요~~
첫번째 출력문에서는 51을 출력하고, 개행이나 탭이나 이런 출력관련된 문자가 없기 때문에,
51 출력하고 커서가 껌뻑껌뻑하게 됩니다.
그리고 그 다음 출력문에서 15 20 을 출력하게 되니깐..
한줄에 쭉 출력이 됩니다~~
그 다음에 개행이 일어나게 됩니다.
만약 51
15 20 이렇게 하려면
printf("51
");
printf("15 20
");
이런식으로 해주셔야 합니다.
도움이 되셨으면 좋겠습니다. ^^
쌤. 질문 있어요.
출력값에 51 15 20 이라고 하셨는데.
프린트에프 ;
프린트에프;
이니까 .
역슬래시 n이 없어도
51
15 20
어닌가해서요??
항상 좋은 강의 감사드립니다~^^
앗 아닙니다. 명시적으로 개행 문자가 들어가야 엔터가 처리됩니다.
셤장에서 이런거 실수 하시면 안되요~~
감사합니다. ^^
감사합니다
시청해 주셔서 감사드립니다.
감사합니다 👍👍
수강해주셔서 감사합니다 ^^
감사합니다 ~!
어려운 내용에 들어오셨네요..^^
오늘 하루도 즐거운 하루 되세요~~^^