여기서 핵심은 괄호는 주소를 증가시킬것인지, 포인터가 가리키는 곳의 값을 증가시킬 것인지를 괄호를 잘봐야한다는 것이고, ++가 앞에 있으면, 또는 뒤에 있으면을 고려할것, 밑에서 3번째 같은 경우에 값을 먼저 출력한 후에 주소를 1증가시킨다는 부분은, 괄호를 연산자 우선순위에 두지 말것, 단지 ++가 앞에 있는지 뒤에있는지를 보고 괄호는 무시할것..
(1) 첫번째 줄에 괄호가 없는 형식인데요. 홍달쌤의 설명에서 빠진부분이 이부분입니다. 첫번째줄을 풀어서 해석하면 두번째줄입니다. 즉, ++*p는 ++(*p)로 풀어서 설명이 가능합니다. 동일하다고보면됩니다.첫번째줄은 즉, 첫번째 줄 "++*P"는 "++(*P)"인거고, 즉 ++와 *p로 나뉜다고 이해하셔야해요. 그래서 *p가 가리키는 곳의 값을 1증가 시키는거구요. (2) 5번째줄의 "*p++"는 일단 괄호가 없기 때문에 ++는 값을 증가 시키는게 아니라 주소를 증가시킵니다. 괄호가 있어야 값을 증가시키는거고, *p++는 괄호없이 디폴트는 주소1증가인데, ++가 뒤에 있기 때문에 *p 즉 값을 먼저 출력한 후에 주소를 1증가시킵니다.
안녕하세요 이 문제로 몇시간동안 멘탈 털려서 일찍 잠들어버린 학생입니다.. 바로 추가 영상으로 설명해주셔서 너무 감사합니다! 문제를 보면서 찾게 된 과정이 *의 값을 출력 하기 위해 계산하는 거 같은데요 증감연산자, 단항연산자 등 우선순위 떠나서 연산자 구분을 하고 기준을 *으로 하여 p가 *과 가까이 있음 출력하고 나머지 계산하고 떨어져있음 *의 값을 출력하기 위해 계산 방향에 따라 순서가 정해지는 패턴 같은 느낌이 들었습니다.. 이렇게 풀어도 되는지 모르겠는데 답은 맞더라구요? 하하;; 가운데 선( | ) 으로 기준을 만들어서 계산 방향을 오른쪽에서 왼쪽으로 잡고 예를 들어 ++ | (*p) 일 때 *p먼저 값 갖고 출력하기 위해 오른쪽에서 왼쪽 방향으로(
안녕하세요~~~ 이건 증감연산자가 전위인지 후위인지의 차이를 먼저 이해하셔야 합니다. ++ 가 앞에 있으면 먼저 증가하고, 출력합니다. ++ 가 뒤에 있으면 먼저 출력하고, 증가하게 됩니다. 예를 들어서, int a = 10; printf("%d", a++); printf("%d", ++a); 이럴 경우, printf("%d", a++); // a 에 있는 10을 출력 후, a 가 11이 됩니다. printf("%d", ++a); // a 에 있는 11을 1 증가해서 12로 만든 후 12가 출력이 됩니다. 최종 출력은, 10과 12가 출력이 됩니다.
참 어떻게 이렇게 완벽한 강의를 하시는지.... 갓흥달쌤
나름 잔머리를 굴려보자면 p를 기준으로 앞뒤로 +가 붙으면 p의 주소값을 연산하고, p를 기준으로 * ( )가 붙으면 값을 연산한다는 추리가 됩니다.
괄호가 있더라도 P앞이던 뒤이던 +가 붙으면 주소(P자체의 값)를 연산하네요 ㅋㅋㅋㅋㅋ
오늘도 좋은 강의 잘 들었습니다
알고 계실지 모르겠지만 흥달쌤은 공시를 준비하는 학생들에게도 반응이 가장 좋습니다
공시판에는 제대로 된 선생님이 없다는 의견이 대다수인데, 흥달쌤 강의만큼은 싫어하는 사람을 못봤습니다.
앞으로도 좋은 영상 부탁드리겠습니다.
와~~~너무 감사한 일이네요~~^^
공시생분들도 들어주신다는 말씀 잊지 않고, 열심히 하겠습니다.
혹시 다른 분들이 제 얘기 하시면 제가 정말 감사해한다고 꼭 전해주십쇼~~^^
하 선생님은 천재십니다......
다른 공식은 다 아는데
*p++ : 출력후 *p 값에 ++ 인줄알았는데, p값에 ++한다는 점
*(p++) : 괄호연산자로 p++ 적용후 *p 출력인줄알았는데, *p 출력 후 p값에 ++한다는 점
두 케이스는 처음알았네요
이렇게 잘 쓰질않다보니...
감사합니다~
실제로 저렇게 쓰는 경우는 거의 없습니다. ^^
아무래도 시험에서는 문법적인 부분을 많이 꼬아서 출제를 하다보니 저런 유형이 만들어지는데요.
실제로 개발할때는 쉽게 개발을 하게 됩니다.
오늘 안 그래도 이 문제로 번아웃 왔었는데ㅋㅋㅋ 잠자기전에 알고리즘 덕분에:)!!🙇♂️
엔잡에서 보고 긴가민가했는데 이 영상보니 이해가 쏙쏙돼요 흥달쌤 짱!!
도움이 되셨다니 다행입니다.
좀 더 다양한 예제로 설명을 드렸어야 했는데, 저런 부분까지 확인하지 못했네요~~^^
이렇게 저도 하나 더 배워가고, 다음에는 좀 더 나은 강의를 만들도록 하겠습니다.
여기서 핵심은 괄호는 주소를 증가시킬것인지, 포인터가 가리키는 곳의 값을 증가시킬 것인지를 괄호를 잘봐야한다는 것이고, ++가 앞에 있으면, 또는 뒤에 있으면을 고려할것, 밑에서 3번째 같은 경우에 값을 먼저 출력한 후에 주소를 1증가시킨다는 부분은, 괄호를 연산자 우선순위에 두지 말것, 단지 ++가 앞에 있는지 뒤에있는지를 보고 괄호는 무시할것..
정리가 되네요~ 감사합니다 ❤
설명의 신! 감사합니다
정처기능이라 다르지만계산문제 보는데 이상하게 5분이상 보는것도 힘든데 이건 봐도 참 재미있다고 생각들고 되려 게임보다 더 보게 되는 채널이 됬네요 혹시 기능사 문제도 받나요?
*(p++)적용시점이 뒤에 있기 때문에 앞에 p값을 가져오고 p를 ++한다.
첫번째도 괄호가 없는데 왜 주소값의 변경이 아닐까요 5번째 출력문애는 주소값 변경이라고 하셨는데….
맞아요 5번째 설명이 첫번째에 대입하면 틀린 설명이네요
(1) 첫번째 줄에 괄호가 없는 형식인데요. 홍달쌤의 설명에서 빠진부분이 이부분입니다. 첫번째줄을 풀어서 해석하면 두번째줄입니다.
즉, ++*p는 ++(*p)로 풀어서 설명이 가능합니다. 동일하다고보면됩니다.첫번째줄은 즉, 첫번째 줄 "++*P"는 "++(*P)"인거고, 즉 ++와 *p로 나뉜다고 이해하셔야해요. 그래서 *p가 가리키는 곳의 값을 1증가 시키는거구요.
(2) 5번째줄의 "*p++"는 일단 괄호가 없기 때문에 ++는 값을 증가 시키는게 아니라 주소를 증가시킵니다. 괄호가 있어야 값을 증가시키는거고, *p++는 괄호없이 디폴트는 주소1증가인데, ++가 뒤에 있기 때문에 *p 즉 값을 먼저 출력한 후에 주소를 1증가시킵니다.
안녕하세요
이 문제로 몇시간동안 멘탈 털려서 일찍 잠들어버린 학생입니다..
바로 추가 영상으로 설명해주셔서 너무 감사합니다!
문제를 보면서 찾게 된 과정이 *의 값을 출력 하기 위해 계산하는 거 같은데요
증감연산자, 단항연산자 등 우선순위 떠나서 연산자 구분을 하고
기준을 *으로 하여 p가 *과 가까이 있음 출력하고 나머지 계산하고
떨어져있음 *의 값을 출력하기 위해 계산 방향에 따라 순서가 정해지는 패턴 같은 느낌이 들었습니다.. 이렇게 풀어도 되는지 모르겠는데 답은 맞더라구요? 하하;;
가운데 선( | ) 으로 기준을 만들어서 계산 방향을 오른쪽에서 왼쪽으로 잡고
예를 들어
++ | (*p) 일 때 *p먼저 값 갖고 출력하기 위해 오른쪽에서 왼쪽 방향으로(
안녕하세요~~~
이 문제로 몇시간 고민하신 분이셨군요~~^^
앞으로 그르지 않으셨음 좋겄습니다.
그리고 아래 내용대로 해주시면 됩니다.
다음에 또 어려운 문제가 나오면 너무 고민 마시고, 바로 질문주세요~
감사합니다. ^^
"짠~ 하고나타났어요!" 없으니 조금 아쉽습니다... ^^;;
아하~~~그걸 빼먹었군요~~^^
다음에 짜란 하고 나타나겠습니다.
갓흥달
도움이 되셨으면 좋겠습니다. ^^
감사합니다.
5번째 설명이 첫번째에 대입하면 틀린 설명이네요
흥달선생님 아직 이해가 명확하게 안된거 같은데 언제 P의 주소값(ex. 100을 101로바꾸거나 102로 바꾸는 것)을 바꾸고 언제 P의 값(10을 후위증가시키는 것)을 바꾸는건지 헷갈립니다...
안녕하세요~~~
이건 증감연산자가 전위인지 후위인지의 차이를 먼저 이해하셔야 합니다.
++ 가 앞에 있으면 먼저 증가하고, 출력합니다.
++ 가 뒤에 있으면 먼저 출력하고, 증가하게 됩니다.
예를 들어서,
int a = 10;
printf("%d", a++);
printf("%d", ++a);
이럴 경우,
printf("%d", a++); // a 에 있는 10을 출력 후, a 가 11이 됩니다.
printf("%d", ++a); // a 에 있는 11을 1 증가해서 12로 만든 후 12가 출력이 됩니다.
최종 출력은, 10과 12가 출력이 됩니다.
이문제 정말 어지럽습니다 ㅠㅠ
이정도문제면 걍 다 틀리라고 내는것같은데...