[자료구조] Chapter 03. 배열, 구조체, 포인터
🚨 'C언어로 쉽게 풀어쓴 자료구조' 라는 책을 활용했던 과거 수업 필기를 정리한 것입니다.
💡 Chapter 순서는 책과 같지만 교수님의 과거 수업 내용에 따라 일부 책과 다른 내용이 있습니다.
배열
- homogeneous(동질적)
- continuous(연속적)
ex) int a, b[3], d[2][3];
메모리 할당 (Memory Allocation)
- 정적 할당 (Static Memory Allocation) : 선언문 시작 전 고정 할당
- 고정 할당 (Dynamic Memory allocation) : 실행 도중 요청에 의해 임시적 할당
malloc()
및 제거free()
p = b; // (ok) -> b의 주소값을 p로 가져옴
p[4] = -6 // -> b의 내용 바뀜 => 이미 만들어진 b의 공간을 공유
// <동적 할당> -> p에 100개 짜리 배열이 만들어짐
p = (int *)malloc(100 * (sizeof(int)));
free();
// d[5][10]을 만들고 싶을 때
q = d; // 기존의 이차원 배열 d를 그대로 사용
// or
q = (int **)malloc(5*sizeof(int*)); // 5개짜리 포인터배열
q[0] = (int *)malloc(10*sizeof(int)); // 각각의 포인터배열에 10개짜리 배열 넣어줌
q[1] = (int *)malloc(10*sizeof(int)); // ...
// ...
q[4] = (int *)malloc(10*sizeof(int)); //
// free(q) // -> q만 반납한 것, q[0]~q[4]는 남아있음(쓰레기처럼 떠돌아다님, 반납할 방법 X)
free(q[0]); free(q[1]); ... free(q[4]); free(q) // OK
구조체(Structure)
- 이질적 (heterogeneous)
- 연속적 (continuous)
typedef struct{
char name[20];
int age;
float height;
char addr[100];
//...
}student;
student A, B, C[100], D[4][20], *E, **F; // 동적할당가능, 선언문의 키워드로 사용 가능
A.name = "수빈";
B.name = "주연";
C[2].name = "재현";
E = &B; // E : 주소값을 나타내는 포인터
E->age = 27; // -> : 포인터 통해 접근할 때
typedef struct{
char name[30];
int age;
Node P; // 불가능(무한루프처럼)
Node *p, *q; // 구조체 자기자신을(만들어질) 가리키는 포인터 사용 가능 => 사이즈 알고있기 때문
}Node;
Node A, B, *F, ** G;
1. A.name = "수빈";
2. A.q = &B;
3. A.q -> age = 25; // q : 구조체 주소/ B.age를 쓴 것과 같은 효과
4. F = (Node *)malloc(sizeof(Node));
5. B.q = F;
6. F->q = &A; // F: 주소
Author And Source
이 문제에 관하여([자료구조] Chapter 03. 배열, 구조체, 포인터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@subinnie/자료구조-Chapter-03.-배열-구조체-포인터저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)