티스토리 뷰
구조체
구조체(structure) - 타입이 다른 데이터를 하나로 묶는 방법
● 구조체 선언
// 구조체 선언
struct person {
char name[10];
int age;
float height;
};
// 구조체 변수 선언
struct person a;
● typedef를 이용한 구조체 선언 (typedef를 사용하면, 구조체 변수를 선언할 때, struct를 붙이지 않아도 됩니다.)
// typedef를 이용한 구조체 선언
typedef struct person{
char name[10];
int age;
float height;
} person;
// 구조체 변수 선언
person a;
● 자체참조 구조체 (필드 중에 자기 자신을 가리키는 포인터가 한 개 이상 존재하는 구조체)
typedef struct ListNode {
char data[10];
struct ListNode *link;
} ListNode;
배열
배열(array) - 타입이 같은 데이터들을 하나로 묶는 방법
● 1차원 배열
배열의 경우 메모리에 1차원 형태로 저장됩니다.
● 2차원 배열
그럼 2차원 배열은 어떻게 저장될까요? -> 2차원 배열 역시 똑같이 1차원 형태로 저장됩니다.
A[0][0] - A[0][1] - A[0][2] - A[0][3] - A[1][0] - .... 이런 식이죠.
포인터
포인터 - 다른 변수의 주소를 갖고 있는 변수
char a = 'A';
char *p; // 포인터 선언
p = &a; // 포인터에 a의 주소값 대입
*p ='B'; // 포인터가 가리키는 값 변경
● 배열과 포인터
배열의 이름 - 사실상 포인터와 같은 역할, (컴파일러가 배열의 이름을 배열의 첫번째 주소로 대치합니다.)
● 구조체와 포인터
구조체의 요소에 접근하기 위해서는 연산자 '->' 를 사용합니다.
struct {
int i;
float f;
} s, *ps;
ps = &s;
ps -> i = 2;
ps -> f = 3.14;
● 포인터의 포인터
int a; // 정수 변수 선언
int *p; // 정수 포인터 선언
int **pp; // 정수 포인터의 포인터 선언
p = &a; // 변수 a - 포인터 p 연결
pp = &p; // 포인터 p - 포인터의 포인터 pp 연결
● 포인터 연산
동적 메모리 할당
프로그램이 메모리를 할당받는 방법
1. 정적 메모리 할당
2. 동적 메모리 할당
● 정적 메모리 할당
메모리의 크기 프로그램이 시작하기 전 결정.
프로그램 수행 도중 크기 변경 불가 -> 처음 결정된 메모리 크기보다 더 큰 입력이 들어오면 처리 불가, 더 작은 값이 들어오면 메모리 낭비
ex) int buffer[100];
● 동적 메모리 할당
프로그램의 실행 도중에 메모리 할당
필요한 만큼 할당받고 사용한 후, 메모리 반납 -> 메모리의 효율적인 사용 가능
int * pi;
pi = (int *)malloc(sizeof(int)); // 동적 메모리 할당
...
... // 동적 메모리 사용
...
free(pi); // 동적 메모리 반납
'자료구조' 카테고리의 다른 글
[자료구조] 리스트 (연결 리스트 부터 이중 연결 리스트까지) (0) | 2020.12.02 |
---|---|
[자료구조] 큐(QUEUE)를 알아보자! (1) | 2020.09.19 |
[자료구조] 스택(stack) 이란? (0) | 2020.07.25 |
[자료구조] 순환(Recursion) with C (0) | 2020.07.23 |
자료구조에 대한 이해, 자료구조란? (0) | 2020.07.21 |
댓글
링크
최근에 올라온 글
최근에 달린 댓글