자격증/정보처리기사 실기 - 기출문제

[정보처리기사 실기] 2021년 3회 07 - 프로그래밍 [C] 포인터

쏠솔랄라 2025. 7. 18. 06:36

 

 


07 다음 C 언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (단, 출력문의 출력 서식을 준수하시오.)

#include <stdio.h>
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("%d", (p+1)->hab + (p+1)->hhab);
}

 

 

 

 

 

 

해설

코드 실행순서 및 해석
1 #include <stdio.h>    
2 struct jsu {   jsu라는 구조체 정의
3      char nae[12];   문자형 데이터가 저장되는 12개짜리 배열 선언
4      int os, db, hab, hhab   정수형 변수 4개가 멤버로 들어감
5 };    
6 int main() { 1 실행
7      struct jsu st[3] = { {"데이터1", 95, 88}, {"데이터2", 84, 91}, {"데이터3", 86, 75} }; 2 jsu라는 구조체 배열 3개를 생성한 후
데이터를 삽입한다
8      struct jsu* p; 3 포인트변수 p를 선언한다
→ 포인트변수이기 때문에 주소를 기억한다
9      p = &st[0]; 4 &st[0]의 주소값을 p에 넣어라
→ 1000(임의의 주소값)
10      (p+1)->hab = (p+1)->os + (p+2)->db; 5 (p+1)의 hab에
(p+1)의 os값과 (p+2)의 db값을 더해 넣어라: 84+75=159
11      (p+1)->hhab = (p+1)->hab + p->os + p->db; 6 (p+1)의 hhab에
(p+1)의 hab값과 p의 os값과 p의 db값을 더해 넣어라: 159+95+88=342
12      printf("%d", (p+1)->hab + (p+1)->hhab); 7 (p+1)의 hab값과 (p+1)의 hhab값을 더해 출력
: 159+342=501
13 }    

 

  nae[0]  nae[1]  nae[2] ... nae[11]
char nae[12]          
int os          
int db          
int hab          
int hhab          

실제 데이터에 저장될 때는 문자열은 12바이트, 정수는 각 4바이트씩 총 16바이트를 차지한다

nae[12] os db hab hhab
총 12Byte        
1Byte 1Byte 1Byte 1Byte 1Byte 4Byte 4Byte 4Byte 4Byte

 

7.

  char nae[12] int os int db int hab int hhab
st[0] st[0].nae[0]~st[0].nae[11] st[0].os st[0].db st[0].hab st[0].hhab
st[1] st[1].nae[0]~st[1].nae[11] st[1].os st[1].db st[1].hab st[1].hhab
st[2] st[2].nae[0]~st[2].nae[11] st[2].os st[2].db st[2].hab st[2].hhab
  char nae[12] int os int db int hab int hhab
st[0] 1 \0 95 88    
st[1] 2 \0 84 91    
st[2] 3 \0 86 75    

 

8. 포인트 변수 주소 삽입

                               
0000                              
nae os db hab hhab nae os db hab hhab nae os db hab hhab
1000 데이터1 95 88     데이터2 87 91 159 342 데이터3 86 75    
  p p+1 p+2
&st[0] &st[1] &st[2]
                               
9999