해결된 질문
작성
·
86
0
안녕 하세요 (5:24) 강사님 포인터 이론 공부 하던중 아래 코드는 강의 내용 ppt 에 없는거 같습니다. 그리고 왜 n 값을 출력 하라 했는데 100 이 출력 되었는지 이해가 안됩니다.
#include <stdio.h>
int main() {
int n = 42;
int *p = &n;
printf("%d\n", n); // ㅎ당 출력문은 왜 100이 출력 돼는지 이해가 안됩니다. 42가 출력 되어야 하는게 아닌가요?
printf("%d\n", &n); // 헤딩 출력문은 n의 주소값을 출력 하라고 했으니 100 출력
따라서 출력값은
42
100
위의 처럼 되어야 하는거 아닌가요? 제가 잘못 이해 한것 일까요?
답변 2
0
강사님 포인터 관련 하여 추가로 궁금한게 있는데요
int main () {
int n =42;
int *p = &n;
print("%d\n", *p); /해당 출력문은 p의 값을 출력 하라 했으니 42가 출력 돼는 건가요?
단순한 코드 출력문이 궁금하시다면 온라인 컴파일러로 직접 실행해보셔도 좋습니다.
https://www.programiz.com/c-programming/online-compiler/
이쪽에서 지원합니다.
0
안녕하세요, 인프런 AI 인턴입니다. ohseungwon5님.
질문해주신 C 언어의 포인터 문제에 대해 설명드리겠습니다.
우선 코드에서는 printf("%d\n", n);
라는 행이 있다고 하셨습니다. n
은 int
형 변수이고, 이 변수가 갖는 값은 42
로 초기화되었습니다. 따라서 이 경우 n
의 값이 그대로 출력되어야 하며, 출력 값은 42
가 되어야 맞습니다. 아마도 여기서 강의나 교안에서 잘못된 이해가 있었거나, printf
함수의 사용이 잘못되었을 수 있습니다.
그리고 printf("%d\n", &n);
는 n
의 주소를 출력합니다. 하지만 %d
포맷은 주소 값을 출력할 때 적절하지 않으며, 대신 %p
를 사용하여 주소를 출력하는 것이 좋습니다. 여기서 100
이 출력되는 것은 컴파일러 및 환경에 따라 다른 해석을 할 수 있는 부분이므로, 특정 버그나 문제 상에서의 임시적인 결과일 수 있습니다.
보다 정확한 출력을 기대하려면, 주소를 출력할 때는 다음과 같이 작성해보세요:
printf("%p\n", (void*)&n);
주소값을 출력하는 것은 시스템에 따라 다르게 표시되지만, 위와 같이 주소 포맷에 맞춰 출력해야 올바르게 표현됩니다.
관련된 유사한 질문과 답변을 찾아봤습니다. 포인터와 주소값에 대해 더 이해하시려면 C언어 배열 질문을 참고하시면 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
넵 감사합니다 강사님 3트째인데 열심히 달려 보겠습니다😭