17. 다음 C언어 코드에 대한 알맞는 출력값을 쓰시오.
#include
struct jsu {
char nae[12];
int os, db, hab, hhab;
};
int main(){
struct jsu st[3] = {{"데이터1", 95, 88},
{"데이터2", 84, 91},
{"데이터3", 86, 75}};
struct jsu* p;
p = &st[0];
(p + 1)->hab = (p + 1)->os + (p + 2)->db;
(p + 1)->hhab = (p+1)->hab + p->os + p->db;
printf("%dn", (p+1)->hab + (p+1)->hhab);
}
1. 구조체 초기화
- 구조체 배열 st는 3개의 jsu 구조체로 초기화됩니다. 각 구조체는 다음과 같은 값들을 가집니다:
- st[0]: nae = "데이터1", os = 95, db = 88
- st[1]: nae = "데이터2", os = 84, db = 91
- st[2]: nae = "데이터3", os = 86, db = 75
2. 포인터 연산
- p는 st 배열의 첫 번째 요소인 st[0]의 주소를 가리킵니다.
3. hab와 hhab 계산
- (p + 1)->hab:
- p + 1은 st[1]을 가리킵니다.
- os는 st[1].os로 84입니다.
- db는 st[2].db로 75입니다.
- 따라서, (p + 1)->hab = (p + 1)->os + (p + 2)->db의 결과는:
- hab = 84 + 75 = 159
- (p + 1)->hhab:
- hhab는 st[1].hhab입니다.
- 따라서, (p + 1)->hhab = (p + 1)->hab + p->os + p->db의 결과는:
- hhab = 159 + 95 + 88
- hhab = 159 + 95 + 88 = 342
4. 최종 출력
- 마지막으로 printf("%d\n", (p + 1)->hab + (p + 1)->hhab);에서:
- (p + 1)->hab는 159이고,
- (p + 1)->hhab는 342입니다.
- 결과는:
- 159 + 342 = 501