코딩일기/자격증
[정보처리기사] [ C ] 구조체와 포인터 활용 | 2021년 1회 정보처리기사 실기 기출 문제 풀이
jhy_2023
2024. 12. 23. 21:59
728x90
반응형
2021년 1회 정보처리기사 실기 기출문제
문제
다음 C 프로그램의 실행결과를 쓰시오.
#include <stdio.h>
struct insa {
char name[10];
int age;
};
void main() {
struct insa s[] = {"Kim", 28, "Lee", 38, "Park", 50, "Choi", 35};
struct insa *p;
p = s;
p++;
printf("%s\n", p->name);
printf("%d\n", p->age);
}
정답
Lee
38
반응형
📌 기본 개념
1️⃣ 구조체(struct)
// 구조체 선언 형식
struct 구조체이름 {
데이터타입 멤버이름;
데이터타입 멤버이름;
};
구조체는 여러 데이터를 하나의 단위로 묶어주는 사용자 정의 자료형입니다.
각 데이터는 멤버 변수로 구성됩니다.
예를 들어, name과 age 데이터를 한 번에 처리하기 위해 구조체를 정의할 수 있습니다.
// 예제
struct insa {
char name[10];
int age;
};
- name: 10개의 문자를 저장할 수 있는 배열.
- age: 정수를 저장하는 변수.
2️⃣ 구조체 배열
// 형식
struct 구조체이름 배열이름[크기] = {초기값1, 초기값2, ...};
구조체를 배열로 선언하면 여러 개의 구조체 데이터를 하나의 배열로 관리할 수 있습니다.
struct insa s[] = {"Kim", 28, "Lee", 38, "Park", 50, "Choi", 35};
위 코드에서 배열 s는 다음과 같은 구조를 가집니다:
3️⃣ 포인터와 구조체의 관계
struct 구조체이름 *포인터변수;
포인터변수->멤버이름;
구조체 배열의 포인터는 배열의 각 구조체 요소를 가리킬 수 있습니다.
포인터 연산자를 사용하여 구조체 멤버에 접근할 때는 ->를 사용합니다.
// 예제
struct insa *p; // // 구조체 포인터 선언
p = s; // 배열 s의 첫 번째 요소를 가리킴 배열의 이름은 첫 번째 요소의 주소를 나타냄
p++; // 다음 요소로 이동 (s[1])
printf("%s", p->name); // 현재 가리키는 구조체의 name 출력
- struct insa *p;
- 구조체 포인터 p를 선언합니다.
- p는 struct insa 타입의 구조체를 가리킬 수 있는 포인터입니다.
- p = s;
- 구조체 배열 s의 이름은 배열의 첫 번째 요소(즉, &s[0])의 주소를 나타냅니다.
- 따라서, p = s;는 구조체 포인터 p가 배열 s의 첫 번째 구조체를 가리키도록 합니다.
- 배열의 이름(s)이 첫 번째 요소의 주소를 나타내는 이유는 C 언어에서 배열 이름은 배열의 시작 주소를 가리키기 때문입니다. 따라서 p = s;는 첫 번째 요소를 정확히 가리키는 포인터로 설정하는 작업입니다.
- p++;
- p는 구조체 포인터이므로 p++은 p를 배열의 다음 요소로 이동시킵니다.
- 여기서 다음 요소란 s[1]에 해당하는 구조체입니다.
- printf("%s", p->name);
- p->name은 p가 현재 가리키는 구조체의 name 멤버에 접근합니다.
- 따라서, 현재 p가 가리키는 구조체(s[1])의 name 값이 출력됩니다.
728x90
📌 문제 해설
struct insa s[] = {"Kim", 28, "Lee", 38, "Park", 50, "Choi", 35};
- 배열 선언 및 초기화
- 구조체 배열 s를 선언하고 초기화합니다. 배열의 각 요소는 name과 age 값을 가집니다.
struct insa *p;
p = s;
- 포인터 선언 및 초기화
- 포인터 p가 구조체 배열 s의 첫 번째 요소를 가리키도록 초기화됩니다.
p++;
- 포인터 연산
- p++는 포인터 p가 다음 구조체 요소(s[1])를 가리키도록 이동시킵니다.
printf("%s\n", p->name);
printf("%d\n", p->age);
- 출력
- p->name: p가 가리키는 구조체(s[1])의 name 멤버 값을 출력합니다. 결과는 "Lee"입니다.
- p->age: p가 가리키는 구조체(s[1])의 age 멤버 값을 출력합니다. 결과는 38입니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
반응형