강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của 무아려히다뎆
무아려히다뎆

câu hỏi đã được viết

(2026) Vượt qua kỳ thi thực hành Kỹ sư xử lý thông tin chỉ trong một tuần

Biến thể của các câu hỏi thi cũ ngôn ngữ C

c언어 기출문제의 변형

Đã giải quyết

Viết

·

229

·

Đã chỉnh sửa

0

다른 분 질문에 올려주신 답글 해설을 보고도 이해가 안되어

다시 질문 남깁니다

강의 21:30을 보자면 print 3번은 ptr=arr인데

앞에서 바꿔진 print2에서 30으로 변경된 것을 사용하는게 아닌가요? 아니라면 print1에서 변경되었던 21에서 자신은 변경없이 다음 arr[1]을 지시하는 것으로 이해해도 되나요?

그런데 또 이상한게요  print 5번은 print4번이 31을 사용하는 것두 아니고 print2에서 바꿔놓은 30을 사용하는 것두 아니고 정말 정리가 안됩니다

pythonjavac정보처리기사

Câu trả lời 3

0

weekendcode님의 프로필 이미지
weekendcode
Người chia sẻ kiến thức

안녕하세요. 3가지를 분명하게 따로 생각하시는 것이 좋습니다.

 

첫 번째, 포인터를 하나 옮긴 것을 출력해라. (문자열 or 배열 or 구조체 배열 or 스택이나 큐와 같은 자료구조 등 메모리 주소로 접근 가능한 경우)

두 번째, 포인터를 하나 옮긴 것을 (혹은 값을 하나 올린 것을) 해당 포인터 (혹은 값에)에 "반영"해라.

세 번째, 값을 하나 올린 것을 출력해라. (그냥 단순히 변수에 값 들어가 있는 형태나 배열을 인덱스로 접근했을 때)


 

첫 번째는 포인터를 옮기는 경우입니다. 이 경우는 단순하게 그 다음 주소로 옮겨서 출력하거나 코드를 해석하면 됩니다. 그게 다입니다. 가리키는 포인터에 반영된 것은 아니므로 그대로 가리키던 곳을 가리킵니다.

 

두 번째가 문제입니다. 이건 포인터를 옮긴 것을 (혹은 값을 증가시킨 것을) 출력도 하고, 그 자체에 반영까지 해야합니다. 이게 바로 ++ 혹은 +=과 같은 연산자가 사용됐을 때입니다. 이 경우에는 실제로 증가도 시키고 추후의 값에도 반영된 상태로 계속 가져가야 합니다.

 

세 번째는 첫 번째와 같은 느낌인데 값 버전입니다. 그저 값을 하나 올려서 출력하거나 계산하고 끝내면 됩니다. 그 값을 담고 있는 변수는 가만히 있고 반영된 것이 없습니다.

 

헷갈릴 수 있는 부분입니다. 혹시 이해가 어려우시면 추가 질문 꼭 부탁드립니다.

이해 되실 때까지 설명드리겠습니다. 감사합니다.

0

SUDAM님의 프로필 이미지
SUDAM
Người đặt câu hỏi

이해가 아직안되어 질문 남깁니다.

24:07 print 2번 출력결과인 30은 왜 다음으로 이어지지 않나요?

print3도 print1값을 참조했고

print4는 print 3값을 참조했는데

갑자기 print5는 print3을 참조했고 그 다음으로이어지는데

print2의 값은 다음으로 적용되지않아서 궁금합니다

weekendcode님의 프로필 이미지
weekendcode
Người chia sẻ kiến thức

안녕하세요, 다음 값으로 적용되지 않는다는 것이

왜 arr+1을 했는데 다음 영역에서 arr로 다시 시작하는지 궁금하신 걸까요?

 

해당 이유는 +1을 출력만 한 것이지, 본인에게 반영한 것이 아니기 때문입니다.

여기서 핵심은 ++이냐, +1이냐의 차이입니다.

++는 엄밀하게 말하면 a = a+1 개념입니다. 다만 ++가 앞에 있으면 먼저 수행하고, ++가 뒤에 있으면 다음으로 넘어가면서 수행하는 것입니다.

 

+1을 출력하는 것은 그냥 +1을 출력하는 것입니다. 예제를 들어드리자면,

int a = 10, int b = 20이 있다고 해봅시다.

++a를 출력하면 11이 출력되고, 실제로 a의 값도 1이 증가한 상태로 반영됩니다.

b+1을 출력하면 어떨까요? 그냥 21이 출력되고 끝입니다. b는 가만히 있고 출력할 때만 1을 더해서 출력한 것이죠.

 

이것이 현재의 값에 반영되고, 반영되지 않는 것의 차이입니다.

이 차이가 과거에도 기출문제 비슷하게 나온 걸로 알고 있습니다.

 

출제자 입장에서는 낚시로 내기 딱 좋을 것 같아서 문제에 포함시켰습니다.

0

안녕하세요, 인프런 AI 인턴입니다. SUDAM님.

C 언어에서 포인터와 배열을 다루다 보면 혼돈스러울 수 있는 부분이 많습니다. 특히 포인터 연산에서의 증감 연산자는 어떤 것이 먼저 수행되는지가 중요한데요. 질문하신 내용에 대해 설명해드리겠습니다.

질문에서 언급하신 것처럼 printf("3번. %d\n", *ptr++); 에서 사용된 후치 연산자 *ptr++는 다음과 같이 동작합니다:

  1. *ptr 는 현재 포인터가 가리키고 있는 메모리 위치의 값을 참조합니다. 즉, 현재의 값을 출력합니다.
  2. ++ 연산자에 의해 ptr 자체가 증가하여 다음 메모리 위치를 가리킵니다. 따라서, 이후에 ptrarr[1]의 값을 가리키게 됩니다.

따라서 printf의 경우, 21이라는 값이 출력된 이후에 포인터가 증가하여 ptrarr[1]을 가리키는 형태가 되는 것이 맞습니다. 처음에 포인터가 가리키고 있던 값이 21로 변경되었고, 이 값이 출력되며, 이후에 포인터는 다음 위치를 가리키게 되는 것이죠.

이해에 도움이 되셨기를 바랍니다. 관련된 예제를 보고 싶으시다면, 다음 링크도 함께 참고해보세요:

위 링크에서 비슷한 주제의 포인터와 배열을 다루는 방법에 대한 내용을 확인할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của 무아려히다뎆
무아려히다뎆

câu hỏi đã được viết

Đặt câu hỏi