출처: https://blog.iroot.kr/341 [RootKR]
제목이 장황하지만 저것 보다 정확한 제목을 쓰기 힘드네요...
우리는 호구조사를 하고 싶습니다. husband와 wife 구조체를 만들고 나이 이름, 배우자의 정보를
저장하고 싶지만 컴파일러가 일을 안하네요, 이럴때는 어떻게 해결해야 할까요...
일단 문제해결을 위해선 문제가 왜 발생했는지를 알아야 합니다.
에러코드는 배우자 field가 완벽하지 않은 타입을 가지고 있다고 하네요?
저게 무슨말일까....고민을 해봅시다. 충분히...그리고 스크롤을 내려주세요
바로 이전글에 마지막 줄에 해답이 있습니다! 바로 우리는 struct wife의 크기를 모른다는 거죠.
컴파일러가 컴파일을 하려고 보니 struct wife의 크기를 몰라
기준으로 잡아야할 크기를 몰라서 파업을 한겁니다.
이제 문제를 알았으니 해결하는건 식은죽 먹기겠죠!
1
2
3
4
5
6
7
8
9
|
struct husband {
int age;
char name[10];
struct wife {
int age;
char name[10];
struct husband spouse;
}spouse;
} a;
|
이런식으로 husband 안에서 wife를 정의해 주면......당연하게도 컴파일이 안됩니다....
에러메시지를 확인해보면 이유는......
어쨋든 우리는 구조체 안에서 구조체를 참조하고싶은데 구조체를 선언하는건 안됩니다...
계속 물레방아처럼 돌고돌 뿐이니까요 사실 해결방법은 매우 간단합니다!
바로 멤버를 구조체가 아닌 포인터로 참조하는거죠! 포인터의 경우 운영체제에 따라
4/8 바이트의 크기를 갖습니다(32bit OS = 4, 64bit OS= 8), 그러므로 컴파일러는
이제 모든 변수의 크기를 아는거죠! 사실 이전글과 이글은 서로를 참조하는 글입니다...
꼭 이 struct huband,wife 같이...구조체가 자기 자신이아닌 다른 구조체를 참조하는 상황도
생각보다 많기 때문에 꼭 한번 알아두시면 좋을 것 같습니다!
unix파일구조, inode, 심볼릭링크(소프트링크), 하드링크 (0) | 2020.09.24 |
---|---|
[C] 문자열 배열 초기화 (0) | 2020.03.01 |
[C] 연산자와 결합법칙,우선순위 (0) | 2020.03.01 |
[C] 구조체는 어떻게 저장될까? (구조체에서의 패딩) (0) | 2020.02.28 |
[C] C언어에서 구조체 선언하기 (0) | 2020.02.28 |
댓글 영역