IT/C
구조체
우루사이
2024. 2. 27. 14:47
구조체 선언
# 구조체 자료형의 선언과 변수 선언을 함께 하는 방법
struct typeA{
...
}var;
# 구조체 자료형의 선언과 변수 선언을 따로 하는 방법
struct typeA{
...
};
struct typeA var;
# 태그명을 붙이지 않고 자료형과 변수를 동시에 선언하는 방법
struct{
...
}var;
# or
typedef struct score{
...
}SCORE;
SCORE student;
- SCORE는 변수의 이름이 아니라 자료형의 이름(구조체 변수 선언)
구조체 변수의 사용
- 구조체 선언시 선언한 멤버 순서대로 메모리 할당
- 전체를 한꺼번에 취급 가능
- 그 안의 멤버들을 따로따로 취급 가능
- 구조체 변수의 멤버들을 나타낼 때에는 변수 명 바로 옆에 .(점)과 멤버명을 붙여서 표현
- 구조체 멤버들을 처리할 때에는 멤버들의 자료형에 맞추어 처리
- 동일한 구조체 자료형의 변수는 대입 연산자를 이용하여 한번에 대입 가능
SCORE student1, student2; ...; student2=student1;
구조체 배열
int main()
{
typedef struct score{
...
}SCORE;
SCORE st[30];
구조체 배열 중 일부 초기화
memset(&st[2], 0, sizeof(SCORE));
- 메모리 영역을 초기화하는 함수인 memset을 사용하여 구조체 배열 st의 세 번째 요소부터 sizeof(SCORE)만큼의 바이트를 0으로 설정
구조체 배열과 구조체 포인터 변수의 적용
int main()
{
typedef struct member{
int id;
char name[20];
}MEMBER;
MEMBER* prt;
MEMBER marray[MAX];
prt=marray;
for(i=0, i<MAX; i++){
scanf("%d%*c", &ptr->id);
...
gets(ptr->name);
ptr++;
}
count=i;
ptr=marray;
for(i=0, i<count; i++){
(ptr+i)->id, (ptr+i)->name);
}
return 0;
}
- %d: 정수 입력
- %c: % 포맷은 해당 입력을 받고 그 값을 무시합니다. 여기서는 입력된 콤마(,)를 무시
- &ptr->id: 구조체 포인터 ptr이 가리키는 구조체의 id 멤버 변수에 값을 저장
자기 참조형 구조체의 정의와 예
typedef struct member{
int id;
char name[20];
struct member* next;
}MTYPE;
MTYPE people1, people2;
- next:
- 같은 구조체 자료형의 변수메모리의 주소를 저장 가능
- struct member, 즉 자기 자신과 동일한 자료형을 가리킴
- people1과 people2가 people1.next 멤버를 통해 연결된 상태
- people1.next == &people2
- people1.next->id == people2.id
- people1.next->name == people2.name
- 연결 리스트(linked list) 개념
자기 참조형 구조체와 동적 메모리 할당
- 메모리의 할당을 의미 -> 변수의 선언, 동적 메모리 할당 함수 이용