강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

진우님의 프로필 이미지
진우

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

다차원 배열과 문자열 배열

23:46 부분 포인터 관련 질문

해결된 질문

작성

·

14

0

22:14초의 코드에서 %s arr[0][0]의 의미는 포인터 강의에서 배운 바로는 %s는 가리키고 있는 주소의 첫번째 값부터 널문자를 만날때까지 출력한다라고 배워서 Hello를 출력하는 것을 이해했었습니다 하지만 23:46부분에서 포인터를 사용할때는 arr[0][0][0]을 출력할때는 Hello중 H를 가리키는 주소를 가지고 있는건가요? 그럼 arr[0][0]과 같은 값을 가리키고 있는건데 제가 잘못 알고 있는건지 궁급합니다

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 질문에 답변드립니다.

 

질문 속의 문장) 22:14초의 코드에서 %s arr[0][0]의 의미는 포인터 강의에서 배운 바로는 %s는 가리키고 있는 주소의 첫번째 값부터 널문자를 만날때까지 출력한다라고 배워서 Hello를 출력하는 것을 이해했었습니다.

-> 네 맞습니다. 첫 번째 배열은 {"Hello", "World"}까지 간 것이고 그 다음에는 "Hello"까지 갔으니 %s로 모두 출력하는 것입니다.

 

여기서 기억하셔야 할 것이 있습니다. 본질적으로 우리가 정의한 "Hello"는 무엇인가요?

'문자'들이 모여있는 배열입니다. 이 자체도 당연히 인덱스로 접근할 수 있을 것입니다.

배열(Array)이니까요.

 

문자로 된 배열은 인덱스로도, 포인터로도 접근할 수 있습니다.

애초에 배열이라는 것 자체가 우리가 앞서 배운 것처럼 메모리 주소를 죽 정렬되어 위치한 것 뿐입니다.

C언어는 이 2가지 개념이 혼재된 프로그래밍 언어입니다.

 

Hello까지 갔으니 여기에서 [0]을 접근하면 'H'를 꺼내옵니다.

그것을 문자 1개로 출력해야하니 %c로 받아야 합니다.

 

Hello 그 자체는 배열이지만, 인덱스로 접근하기 때문에 값으로 인식하시면 됩니다.

그 외에 더 헷갈리게 생각하실 필요 없습니다.

0

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

포인터와 문자열 출력에 대한 C 언어 개념이 혼란스러울 수 있는 부분에 대해 설명해드리겠습니다. printf("%s", arr[0][0]);에서 %s는 해당 메모리 주소에서 시작해 널 문자를 만날 때까지 문자열을 출력합니다. 이는 arr[0][0]이 문자열의 처음을 가리키고 있는 주소라는 의미이며, “Hello”와 같은 문자열 전체를 출력할 수 있는 이유입니다.

23:46의 경우, arr[0][0][0]는 배열 또는 포인터의 첫 번째 문자를 직접 참조합니다. H는 “Hello” 문자열의 첫 번째 문자이므로, arr[0][0][0]H를 가리키며, 해당 값만 출력하면 단일 문자 H가 됩니다. arr[0][0]H가 포함된 문자열의 시작 주소를 지칭하고 있으므로 이 부분에서 혼란이 있는 것일 수 있습니다.

더 많은 정보를 이해하려면 유사한 질문과 답변을 참고해 보시기 바랍니다:

위 링크들은 포인터와 문자열 출력을 보다 구체적으로 이해하는 데 도움이 될 것입니다.

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

진우님의 프로필 이미지
진우

작성한 질문수

질문하기