3.1 구조제 정의 및 선언
Def)
- 구조체: 사용자가 C언어의 기본 데이터 타입(Data Type)을 가지고 새롭게 정의할 수 있는 사용자 정의 타입을 의미.
(데이터 타입 중 가장 큰 타입)
- 데이터 타입(Data Type): int, char, float, double 처럼 변수를 선언할 때 정의해야 하는 자료형
- typedef: 구조체 이름이 길 때 짧게 재정의 할 수 있다.
- 구조체의 멤버(member), 멤버 변수: 구조체를 구성하는 변수.
Ex)
<hide/>
#include <stdio.h>
#include <string.h>
struct Student
{
char Name[10];
int Age;
double Height;
};
int main()
{
int i, n;
struct Student KimRan[10]; // 구조체 변수 선언, 자료형(struct Student), 변수명(KimRan)
scanf("%d", &n );
for(i = 0;i < n; ++i)
{
scanf("%s", KimRan[i].Name); // char 배열은 배열처럼 입력, 출력.
scanf("%d", &KimRan[i].Age); // 변수에 저장할 떄는 &를 꼭 붙인다.
scanf("%lf", &KimRan[i].Height);
}
for(i = 0;i < n; ++i) // n명의 이름 나이 키를 출력.
{
printf("%s\n", KimRan[i].Name);
printf("%d\n", KimRan[i].Age);
printf("%lf\n", KimRan[i].Height);
}
return 0;
}
`
3.2 구조체를 쓰는 이유는?
Note) 기존 자료형(int, double, char) - built in type <--> structure type
내가 필요한 자료형은 "양수" 길이 자료형-> size width; 자료형 변수명;
그럼 폭을 줄이려고 __width; 시에 음수가 되면 컴파일 에러가 발생한다.
"학생 자료형" -> Student KimRan;// 자료형 변수명;
Note)기존 자료형 중에 long double 이 큰 편이지만 구조체는 더 크게 정할 수 있다.
Ex)
<hide/>
#include <stdio.h>
typedef struct Student // 자료형으로 정리 , 구조체이름(Student)
{
char Name[30];
int Age;
double Tall;
}Student_t; // struct Student 대신에 Student_t로 재정의.
int show()
{
Student_t KimRan; // 구조체 변수 선언
KimRan.Age = 20;
return KimRan.Age;
}
int main()
{
printf("%d", show());
return 0;
}
3.3 구조체 정의 규칙
- 전역에서 정의
- 키워드: "struct"
- 구조체 이름은 자유롭게 정할 수 있음.
Note) "구조체도 "자료형"이다" -> 그럼 "point to 사용자정의자료형"도 되지 않을까?
point to int = int* pNum; ( int*: 자료형, pNum: 변수명 )
3.4 포인터 변수를 이용한 구조체
- 구조체 변수로 멤버(member)를 접근할 때 사용하는 연산자는 온점(.)이다.
- 구조체 포인터 변수로 멤버를 접근할 때는 화살표(->)를 사용.
Ex)
<hide/>
#include <stdio.h>
struct point
{
int x;
int y;
};
int main()
{
struct point ptStart; // pt: point 자료형의 약자
struct point* pptStart; // ppt: ptr, pointer의 약자
pptStart = &ptStart;
scanf("%d %d", &pptStart->x, &pptStart->y );
printf("%d %d\n", ptStart.x, ptStart.y ); // 구조체 변수로 멤버에 접근(.)
printf("%d %d\n", (*pptStart).x , (*pptStart).y );
printf("%d %d\n", pptStart->x, pptStart->y ); // 구조체 포인터 변수로 멤버에 접근(->)
return 0;
}
3.5 구조체 배열
Def) 구조체를 여러 개 모은 것
Ex) !!!!!오류!!!!!!
<hide/>
#include <stdio.h>
#include <string.h>
struct Student
{
int number;
char name[20];
double grade;
};
int main()
{
struct Student KimRan[100];
KimRan[2].number = 1004;
strcpy( KimRan[2].name , "김란");
KimRan[2].grade = 197.0;
printf("%d %s %lf", &KimRan[2].number, KimRan[2].name, &KimRan[2].grade );
}
3.6 구조체 반환
'컴퓨터 과학 > C Language' 카테고리의 다른 글
Chapter 02. 포인터(Pointer) (0) | 2022.01.30 |
---|---|
Chapter 01. 함수(Function) (0) | 2022.01.30 |
2022-01-27 재귀함수 (0) | 2022.01.28 |
2022-01-26 구조체 할당 (0) | 2022.01.27 |
2022-01-24 포인터 연습 (0) | 2022.01.25 |