강의

멘토링

로드맵

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

dhkdxo12님의 프로필 이미지
dhkdxo12

작성한 질문수

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

포인터 조작과 출제 패턴 (2. 포인터 증가/감소, 이중 포인터)

메모리 주소 및 배열 관련

해결된 질문

작성

·

16

0

포인터 조작과 출제 패턴 (2. 포인터 증가/감소, 이중 포인터) 3:36

배열의 경우는 메모리 주소와 같은 개념이라고 이해했는데 char *ptr_a=a; 경우 a는 배열 내 첫번째 요소를 의미하는 것으로 "H"로 지정된다는 것을 이해를 했습니다.

다만, printf("%c/n", *ptr_a);에서 변수 앞에 출력하고자하는 변수 앞에 *가 있으면 해당 메모리 주소의 값으로 출력이 된다고 하였는데

배열일 경우, printf("%c/n", *ptr_a) 값과 printf("%c/n", ptr_a) 값은 같은건가요?

일반적으로 *가 없으면 메모리 주소를 출력하는 것으로 알고 있습니다.

답변 2

0

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

안녕하세요,

 

배열을 가리키고 있는 포인터 변수를 ptr_a라고 하면, %c 형태로 ptr_a를 출력하면 오류가 발생합니다.

포인터 주소를 문자 1개 형태로 출력하려고 하기 때문입니다.

  • printf("%c\n", ptr_a) (틀림 - 포인터 주소를 출력)

  • printf("%c\n", *ptr_a) (맞음 - 포인터가 가리키는 문자 출력)

0

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

질문해주신 부분에서 배열과 포인터의 기본 개념에 대해 간단히 설명드리겠습니다.

  1. 포인터와 배열의 관계:

    • char *ptr_a = a; 에서 a 는 배열의 이름으로, 배열의 첫 번째 요소의 메모리 주소를 가리킵니다. ptr_a 도 배열의 첫 번째 요소를 가리키도록 초기화됩니다.
  2. printf에서의 출력:

    • printf("%c/n", *ptr_a);:
      • *ptr_aptr_a 가 가리키고 있는 위치의 값을 참조합니다. 즉, 배열의 첫 번째 요소를 의미합니다. 따라서, 이 출력 결과는 “H” 가 됩니다.
    • printf("%c/n", ptr_a);:
      • ptr_a 는 배열의 첫 번째 요소의 주소를 나타내므로, %c 포맷을 사용할 경우 적절하지 않습니다. C 언어에서 포인터 주소를 출력하고자 할 경우에는 %p 포맷을 사용하는 것이 일반적입니다. 출력이 제대로 되지 않을 수 있습니다.
  3. 일반적인 포인터 출력:

    • * 연산자가 붙어있지 않을 때는, 포인터 ptr_a 가 저장하고 있는 메모리 주소를 출력하게 됩니다. 이는 보통 %p 포맷으로 출력되는 것이 맞습니다.

질문에서 다루신 예제로 강조하고 싶은 부분은, 배열의 이름이나 포인터 자체를 그대로 %c형식으로 출력하면 원하는 결과가 나오지 않을 수 있다는 점입니다. 그 이유는 배열의 첫 번째 요소에 접근할 때 데이터와 주소를 혼동해서는 안 되기 때문입니다.

이와 관련한 유사 질문을 확인하려면 아래 링크를 참고하시기 바랍니다:
- C언어 배열과 포인터 연습
- 배열과 포인터 사용법

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

dhkdxo12님의 프로필 이미지
dhkdxo12

작성한 질문수

질문하기