구조체 크기 만큼 동적할당을 하다가 분명 맞게 썼는데 자꾸 오류가 뜨는 현상이 있었습니다.
그래서 구조체 형식을 봤을 때 typedef 구조체를 선언하는 부분에서 생긴 오류인 것 같았습니다.
typedef struct {
...
} tree; 여기서
typedef struct tree {
...
} tree;
로 바꾸니까 오류가 없어졌습니다.
typedef 구조체 선언 사용법
typedef struct 구조체 이름 {
.
.
.
} 구조체 별칭
구조체 이름과 구조체 별칭의 차이인 것 같습니다.
항상 별칭만 사용해왔는데 별칭만 사용한 구조체를 익명 구조체라고 합니다.
struct 구조체이름 *포인터이름 = malloc(sizeof(struct 구조체이름));
- 구조체 포인터를 선언할 때는 포인터 변수이기 때문에 *를 붙여줍니다. 하지만 저는 구조체 포인터를 typedef tree* treePointer라고 재정의 해줬기 때문에 treePointer ptr 라고 선언할 수 있는 겁니다.
- malloc을 할 때는 구조체 이름을 써줘야합니다!
참고로 구조체 이름과 별칭을 둘 다 사용할 때에는, 구조체 이름에 맨 앞에 _를 붙여줍니다.
typedef가 뭔데요?
typedef는 기존 자료형(구조체)에 새 이름을 부여하는 것입니다.
정수 자료형 int를 INT라고 재정의할 수 있게 됩니다.
typedef 를 사용할 때 구조체 별칭이 필요한데, 구조체 별칭은 구조체를 정의할 때 중괄호 뒤에 써주면 됩니다.
구조체도 간단한 자료형으로 만들 수 있습니다.
원래 구조체를 선언할 때엔 struct [구조체 이름] [변수명] 으로 선언했지만,
typedef를 사용하면 struct를 안 쓰고 [구조체 이름][변수명] 으로 변수를 선언할 수 있게 됩니다.
요약
typedef struct 구조체 이름 { // malloc 할 때 사용
.
.
.
} 구조체 별칭 // typedef 할 때 사용
'C' 카테고리의 다른 글
[시스템프로그래밍] ssh, sftp, 커널과 셸 (2) | 2023.10.10 |
---|---|
[시스템프로그래밍] 가상화, 리눅스, WSL2와 Ubuntu 차이 (0) | 2023.10.10 |
[자료구조] 포인터 응용 (0) | 2023.03.17 |
[C] 포인터 배열을 이용하여 2차원 배열 만들기 : 동적할당 (0) | 2022.12.11 |
메모리는 넉넉하게 (0) | 2022.12.06 |