본문 바로가기

C언어

컴프 11주차

<구조체>
struct student { // student는 구조체 명, 태그, 메모리가 잡히지 않음
 int id; //멤버
 int midterm; //멤버
 int final; //멤버
}; 
student에 대한 기본 틀
기본 자료형이 모여서 파생자료형이 되는데 구조체는 파생자료형임.

- 구조체 변수 구조체변수 선언, 메모리가 잡힘
struct student aStudent; // aStudent는 구조체 변수
*struct student자체가 자료형이 됨. 
=> 구조체는 자료형이고, 그 자료형으로부처 변수 선언이 가능한 것임.

구조체 변수 초기화 선언과 동시에 초기화
struct student aStudent = {19950001, 100, 50} -> 각각의 멤버에 초기값 부여.

. (dot)연산자 : 구조체 변수 멤버 각각에 접근.

//구조체 멤버 각각에 값 설정
aStudent.id = 19950001 
aStudent.midterm = 100; 
aStudent.final = 50; 

//구조체 멤버의 값을 입력받는다. 
printf("학번 입력:"); 
scanf("%d", &aStudent.id ); 
printf("중간고사 성적 입력:"); 
scanf("%d", &aStudent.midterm ); 
printf("학기말고사 성적 입력:"); 
scanf("%d", &Student.final );

//구조체 멤버의 값을 출력한다. 
printf("학번: %d 중간: %d 학기말: %d\n", aStudent.id, aStudent.midterm, aStudent.final );

//중간고사와 학기말고사 성적을 더해 출력한다. 
printf("학번 %d의 총점은 %d이다\", aStudent.id, aStudent.midterm + aStudent.final );

 

struct customer {
char name[20];
int age;
}; //꼭 ;를 써줘야 함.

int main(void) { 
struct customer aMan, aWoman; 

strcpy(aMan, "에릭"); // 문자열 복사
//aMan.name = "에릭" 이 안 되는 이유는 name은 상수이므로, 값을 넣을 수 없음.
aMan.age = 35;

printf("여자 고객의 이름은?");
scanf("%s", aWomen.name); //배열이므로 &를 쓰지 않음.
printf("나이는?"); 
scanf("%d", &aWomen.age); //정수형이므로 &를 써야 함.

printf("%s은 %d이다.", aMen.name, aMen.age);

 

 

<구조체 배열> 
struct student sList[3]; // sList[0], sList[1], sList[2]는 각각 구조체 변수
sList[0].id 
sList[0].midterm 
sList[0].final 

sList[1].id 
sList[1].midterm 
sList[1].final
 
sList[2].id 
sList[2].midterm 
sList[2].final

- 구조체 배열 초기화
struct student sList[3] = {{19950001, 100, 50}, {20170001, 100, 100}, {20170002, 10, 20}};


for (i = 0; i < 3; i++) { 
 printf("학번, 중간, 학기말 입력: "); 
 scanf("%d %d %d", &sList[i].id, &sList[i].midterm, &sList[i].final); 

 

+)

struct student {
char name[20];
int midterm;
int final;
};
student 구조체의 크기는 28바이트임.

struct student {
char name[19];
int midterm;
int final;
};
student구조체의 크기는 20바이트임.


name배열의 크기가 줄어들었는데 구조체의 크기가 같은 이유?
- 구조체는 멤버 중 가장 큰 자료형의 배수형으로 나옴. 그래서 4바이트의 배수형으로 나옴. 
또 구조체는 멤버의 위치에 따라서도 크기가 달라짐.
구조체 말고 공용체도 있음.(수업에서 배우지 않음)

'C언어' 카테고리의 다른 글

13주차 컴프  (0) 2023.11.25
컴프 12주차  (0) 2023.11.18
컴프 9주차 요약  (0) 2023.11.04
컴프 10주차  (0) 2023.11.04
컴프 7주차  (0) 2023.10.14