메모리 주소 및 배열 관련
포인터 조작과 출제 패턴 (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님.
질문해주신 부분에서 배열과 포인터의 기본 개념에 대해 간단히 설명드리겠습니다.
포인터와 배열의 관계:
char *ptr_a = a;에서a는 배열의 이름으로, 배열의 첫 번째 요소의 메모리 주소를 가리킵니다.ptr_a도 배열의 첫 번째 요소를 가리키도록 초기화됩니다.
printf에서의 출력:
printf("%c/n", *ptr_a);:
*ptr_a는ptr_a가 가리키고 있는 위치의 값을 참조합니다. 즉, 배열의 첫 번째 요소를 의미합니다. 따라서, 이 출력 결과는 “H” 가 됩니다.
printf("%c/n", ptr_a);:
ptr_a는 배열의 첫 번째 요소의 주소를 나타내므로,%c포맷을 사용할 경우 적절하지 않습니다. C 언어에서 포인터 주소를 출력하고자 할 경우에는%p포맷을 사용하는 것이 일반적입니다. 출력이 제대로 되지 않을 수 있습니다.
일반적인 포인터 출력:
*연산자가 붙어있지 않을 때는, 포인터ptr_a가 저장하고 있는 메모리 주소를 출력하게 됩니다. 이는 보통%p포맷으로 출력되는 것이 맞습니다.
질문에서 다루신 예제로 강조하고 싶은 부분은, 배열의 이름이나 포인터 자체를 그대로 %c형식으로 출력하면 원하는 결과가 나오지 않을 수 있다는 점입니다. 그 이유는 배열의 첫 번째 요소에 접근할 때 데이터와 주소를 혼동해서는 안 되기 때문입니다.
이와 관련한 유사 질문을 확인하려면 아래 링크를 참고하시기 바랍니다:
- C언어 배열과 포인터 연습
- 배열과 포인터 사용법
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)
0
42
2
26년 1회 실기 해설 강의
0
59
2
53번 4-1 자료 오류 있는 것 같습니다.
0
72
2
7번문제
0
59
2
C언어 변형문제 9번문제 Pdf 수정요청
0
47
2
메서드 오버드라드
0
47
2
실수
0
46
1
공부 우선순위 우선강의 알려주세요
0
88
1
생성자 호출순서 강의 10번 문제 30분대 질문입니다
0
48
2
25년 2회 기출 5:40 질문입니다.
0
42
2
모의고사1회 3번 파이썬문제
0
74
2
C언어 출제변형 6번 문제
0
50
2
c언어 출제변형 강의 질문
0
31
2
28:40
0
33
2
C : 언어 배열과 문자열 수업자료
0
29
2
파이썬 리스트, 딕셔너리 질문
0
42
2
모의고사 관련 질문 건
1
69
3
자료 내용 오류
0
64
2
정적 변수, 정적 메서드(static) v2
0
48
2
v1.2 와 v0.91 PDF
0
101
1
업캐스팅 (부모형태, 자식생성자)
0
51
2
정보처리산업기사 준비중입니다.
0
74
2
실기 D -6
0
105
2
(기출) 2024년 2회 기출문제 - 이론 포함 22분32초 질문입니다
0
57
3





