71. 다음 C언어 프로그램이 실행되었을 때의 결과는?
① 0 ② 4
❸ 8 ④ 12
🔍 문제 분석
#include <stdio.h>
int main(void) {
int n = 4;
int* pt = NULL;
pt = &n;
printf("%d", &n + *pt - &pt + n);
return 0;
}
이제 하나씩 해석해볼게.
🛠️ 코드 분석
- 변수 선언 및 초기화
- n은 정수형 변수이며 4로 초기화됨.
- pt는 정수형 포인터인데, 처음엔 NULL이지만 이후에 n의 주소를 가리키게 됨.
- int n = 4; int* pt = NULL;
- 포인터 할당
- pt는 n의 주소를 저장함.
- 즉, pt는 &n과 같은 값을 가짐.
- pt = &n;
- printf 계산식이 식을 차례대로 풀어볼게.이제 실제 연산을 진행해볼게.
- &n + *pt - &pt + n = &n + 4 - &pt + 4
- 1️⃣ &n: 변수 n의 주소
2️⃣ *pt: pt가 가리키는 값, 즉 n의 값(4)
3️⃣ &pt: 포인터 변수 pt의 주소
4️⃣ n: 변수 n의 값, 즉 4 - printf("%d", &n + *pt - &pt + n);
🔬 주소값을 고려한 해석
- 보통 변수는 메모리의 연속된 공간에 저장됨.
- &n과 &pt는 각각 n과 pt의 메모리 주소를 의미.
- 일반적으로 &pt는 &n보다 높은 주소에 위치.
- 보통 &pt - &n은 1이므로, &n - &pt = -1이 됨.
🏆 최종 계산
&n + 4 - &pt + 4
= -1 + 4 + 4
= 8
즉, 프로그램 실행 결과는 8이 됨.
📌 결론
정답은 ③ 8!
🎯 추가 예시
비슷한 개념을 적용한 간단한 예제를 보면 이해가 쉬워질 거야.
✅ 예제 코드
#include <stdio.h>
int main() {
int a = 10;
int *p = &a;
printf("%d", &a - &p + *p);
return 0;
}
이 코드도 주소 값 차이를 계산해서 결과가 나오게 됨.
📚 정리
- 포인터의 기본 개념
- *pt는 n의 값을 가리킴 (*pt = 4)
- &n과 &pt는 각 변수의 메모리 주소를 나타냄.
- 주소 연산의 이해
- &n - &pt 같은 연산은 주소 차이를 계산할 때 주의해야 함.
- 출력값 유도 과정
- 주소 차이와 변수 값을 더하고 빼면서 결과를 계산.
🚀
반응형
'기출문제 > 정보처리기사' 카테고리의 다른 글
2021년 3회 정보처리기사 기출문제 73번 (1) | 2025.03.19 |
---|---|
2021년 3회 정보처리기사 기출문제 72번 (0) | 2025.03.19 |
2021년 3회 정보처리기사 기출문제 70번 (0) | 2025.03.17 |
2021년 3회 정보처리기사 기출문제 69번 (0) | 2025.03.17 |
2021년 3회 정보처리기사 기출문제 68번 (0) | 2025.03.17 |