[4주차] 구조체
구조체 Structure
여러가지 변수들을 묶어 객체처럼 관리하는 것.
struct Student{
int id;
char name[10];
};
위처럼 정의한 후 선언할 때는 구조체명만 쓰는게 아니라 struct도 써줘야 한다. 초기화는 중괄호로 하면 된다.
struct Student gio = {19011484, "GIO"};
맴버 변수 사용은 .
을 붙여서 하면 된다.
gio.id = 19011484;
활용
1.정의와 선언을 한큐에
구조체 정의와 선언을 한번에 할 수 있다.
struct Student{
int id;
char name[10];
} st = {19011484, "GIO"};
C언어를 고인물 파티로 만드는 원인이 여깄었다.
2.역겹도르
이름이 없는 구조체를 만들 수 있다.
struct {
int this_is;
char madness;
} str;
이렇게 하면 일회용 구조체를 만들 수 있다. 이름이 없으므로 다른곳에서 선언이 불가하기 때문이다.
구조체의 크기
구조체는 보통 맴버변수의 크기의 합을 크기로 가지지만, 구조체는 8바이트 단위로 할당되기 때문에 꼭 크기의 합이 아닐수도 있다.
구조체의 크기가 궁굼하면 sizeof()
함수를 활용하자.
구조체 배열
구조체로 배열을 만들 수도 있다. 별 특별한 것은 없고 초기화를 중괄호로 할 수 있다.
struct student st[3] = {{"Tom", 1, 90}, {"Holand", 2, 100}}
생략된 부분은 0과 null로 초기화된다.
구조체 포인터
일반적 사용법은 포인터와 같다. 포인터는 구조체가 시작하는 곳에서 시작한다.
struct student{};
struct student std[10];
printf("%d", (*std).id))
구조체 포인터를 통한 맴버 변수 접근
구조체 포인터를 통해서 구조체의 맴버에 접근하기 위한 방법은 아래와 같다.
(*p).id = 10;
괄호를 씌워주는 이유는 간접연산자(*)보다 점(.) 연산자의 우선순위가 높기 때문이다.
혹은 구조체 포인터에만 사용가능한 화살표 연산자를 사용한다. 이 방법이 더욱 보편적이다.
p->id = 10;
구조체 함수
구조체를 함수의 인자값이나 리턴값으로 사용할 수 있음.
struct student modify(struct student st)
{
st.name = "Gio Paik";
return st;
}
일반 변수를 사용하는 것과 크게 다르지 않다.
중첩 구조체
다른 구조체를 맴버 변수로 사용하는 구조체
struct address { // 구조체 address 정의
int zipcode;
char *city;
};
struct student { // 구조체 student 정의
int id;
char name[8];
double grade;
struct address addr; // 멤버 addr의 자료형은 struct address
};
맴버값 참조는 아래와 같이 하면 된다.
st.addr.zipcode = 13603;
너무 남용하면 스파게티 코드가 된다.
자기참조 구조체
자기 자신을 맴버 변수로 갖는 구조체는 만들 수 없다. 그러나 자신의 포인터를 변수로 갖는 구조체는 가능하다.
struct human{
int age;
char name[20];
struct human *friends[10];
};
사용자 형정의 typedef
구조체나 자료형의 이름을 사용자가 지정해 줄 수 있다.
typedef int INT;
typedef struct student{
int id;
char name[20];
} STUDENT;
편안...
'학부 수업 > C프로그래밍' 카테고리의 다른 글
[6주차] 연산자 함수, 자료형 심화 (0) | 2020.04.10 |
---|---|
[5주차] 동적 할당 (0) | 2020.04.10 |
[3주차] 문자열 (0) | 2020.04.10 |
[2주차] 포인터 개요 및 복습 (0) | 2020.04.10 |
세종대학교 고급 C 프로그래밍 강의노트 (2) | 2020.04.10 |
댓글
이 글 공유하기
다른 글
-
[6주차] 연산자 함수, 자료형 심화
[6주차] 연산자 함수, 자료형 심화
2020.04.10 -
[5주차] 동적 할당
[5주차] 동적 할당
2020.04.10 -
[3주차] 문자열
[3주차] 문자열
2020.04.10 -
[2주차] 포인터 개요 및 복습
[2주차] 포인터 개요 및 복습
2020.04.10