-
[C] 구조체, 구조체 배열, 연결 리스트c & c++ 2022. 9. 16. 11:33
💡 구조체
: 다양한 정보를 저장하기 위해 필요에 따라 생성하는 자료형 == 사용자 정의 자료형/구조체
: 다양한 자료형을 그룹화하여 하나의 변수로 처리할 수 있게 만든 자료형
// 구조체 변수 선언 방법 case 1 struct myclass { // 구조체 멤버 변수 int number; double height; double weight; char *name; }; // 구조체 정의 struct myclass a; // 구조체 변수 a 선언 struct myclass b; // 구조체 멤버 변수에 접근 .이용 a.number = 10; b.number = 20; // 구조체 변수 선언 방법 case 2 // case 1과 case 2의 결과는 같음 struct myclass { int number; double height; double weight; char *name; }a, b; // 구조체 정의와 동시에 변수 선언
: 구조체 초기화값 복사할 수 있다.
// 구조체 Point 정의 struct Point { int x; int y; }; // 구조체 Rectangle 정의 struct Rectangle { struct Point a; struct Point b; }; // 구조체 Rectangle 변수 rect 선언 struct Rectangle rect; // rect 구조체 멤버 변수 초기화 rect.a.x = 1; rect.a.y = 2; rect.b.x = 3; rect.b.y = 4;
: 해당 자료형의 포인터 변수를 선언하면, 해당 자료형의 주소 정보를 저장할 수 있는 메모리가 할당된다.
#include <stdio.h> struct Point { int x, y; }; main() { struct Point a; // 구조체 Point 자료형인 변수 a 선언 struct Point* b; // 구조체 Point 자료형인 포인터 변수 b 선언 b = &a; // 구조체 변수 a의 주소 값을 변수 b에 저장 a.x = 1; // 구조체 변수 a의 멤버 변수 x 초기화 a.y = 2; // 구조체 변수 a의 멤버 변수 y 초기화 printf("구조체 a점 x좌표는 %d, y좌표는 %d\n", a.x, a.y); b->x = 3; // 구조체 포인터 변수를 참조 연산자(->)를 통해 멤버 변수 x 값 설정 b->y = 4; printf("구조체 a점 x좌표는 %d, y좌표는 %d\n", a.x, a.y); (*b).x = 5; // 구조체 포인터 변수를 역참조 연산자 (*)를 통해 멤버 변수 x 값 설정 (*b).y = 6; printf("구조체 a점 x좌표는 %d, y좌표는 %d\n", a.x, a.y); printf("구조체 a점 x좌표는 %d, y좌표는 %d\n", b->x, b->y); printf("구조체 a점 x좌표는 %d, y좌표는 %d\n", (*b).x, (*b).y); }
* (*b).x == a.x == b -> x 셋 다 같은 의미
❗ 프로그래밍/코딩
1. 정보를 저장하는 것
2. 저장된 정보를 목적에 맞게 가공하여 의미 있는 결과를 출력하는 것.
❗ 모든 포인터 변수는 주소를 저장할 수 있는 4바이트로 할당된다.
💡 구조체 배열
struct class a[10]; // 구조체 배열 선언 a[0].name = "John"; a[0].weight = 75; a[0].height = 180; a[1].name = "Can"; a[1].weight = 50; a[1].height = 160; ...
❗ 두 번째 배열 항목이 빌 경우, 나머지 항목을 왼쪽으로 이동시켜야한다.
빈 방을 오른쪽 끝으로 몰지 않을 경우 새로운 데이터 추가 시 빈 방을 찾아야해서 번거롭다.
=> 연결 리스트로 해결
💡 연결 리스트
: 정보가 기차같이 0 -> 0 -> 0 -> 0 같은 형태로 줄줄이 연결되어 있는 리스트
: 자기 참조, 자기 참조 구조체 사용
☞ 자기 참조 : 자기 자신과 같이 생긴 것을 참조한다(가리킨다) -> 포인터를 통해 구현
☞ 자기 참조 구조체 : 자기 자신과 같은 형태의 구조체를 가리킬 수 있다.
: 다양한 자료형 + 자신과 같은 자료형을 가리키는 포인터 변수
struct abc { int data; // 정수형 변수 struct abc *next; // 자기 참조를 위한 포인터 변수 선언 }; // typeof 키워드로 구조체 별명 짓기 typeof struct abc Type; Type x; Type y; Type z; struct abc x; struct abc y; struct abc z; x.data = 10; y.data = 20; z.data = 30; x.next = &y; // 흩어진 구조체 연결 y.next = &z; z.next = &x; // 구조체 y삭제 x.next = y.next; // x 구조체에 z 구조체 주소값 넣어줌 y.next = NULL;
'c & c++' 카테고리의 다른 글
[C++] C++이란? string 클래스 (1) 2022.09.19 [C] 기호 상수 (0) 2022.09.18 [C] 포인터, malloc() (0) 2022.09.16 [C] 함수, static, 배열 (0) 2022.09.14 [C] 반복문 , 조건문 (0) 2022.08.06