[C언어 자료구조]자체 참조 구조체

2019. 4. 14. 01:19개인공부/C언어 자료구조

1. 자체 참조 구조체

 

구조체를 정의할 때 멤버 중에 자기 자신을 가리키는 포인터가 존재하는 구조체를 말한다.

 

뭔 말이냐

 

	struct ListNode {
		char data[10];
		struct ListNode* link;
	};

 

이런 거다 ListNode라는 구조체를 선언하면서 멤버 변수로 ListNode의 포인터변수가 들어가 있다.

 

그 예전에 배운 재귀호출 느낌나기도 하고 컴파일이 안될 거 같은데 컴파일은 된다.

 

연결 리스트나 트리, 그래프 등의 자료구조에 쓰일 예정이라고 책에 쓰여 있다.

 

흠 ..

 

2. 포인터 사용시 주의점

 

(1) 포인터가 어떤 값을 가리키고 있지 않을 때는 NULL로 설정하는 것이 좋다.

int* pi=NULL;

포인터가 선언되고 NULL이 아니라면 어떤 주소를 가리키고 있을 텐데 그 주소에 값이 들어가는 경우가 생겨서 그런 건가?

 

(2) 초기화가 안 된 포인터 변수가 가리키는 곳에 자료를 저장하면 안 된다.

 

	char* pc;
	*pc = 'E';

 

선언만되고 초기화가 안되었다. 거기다 'E'라는 값을 넣어주니 런타임에러가 뜬다.

아마 선언과 동시에 랜덤한 주소가 들어가고 그 주소에 값이 저장되니 에러가 뜬 것 같다.

 

(3) 자료형이 다른 포인터 사이의 변환에는 명시적인 형 변환을 사용한다.

 

	int* pi;
	float* pf;
	pf = (float*)pi;

 

음.. 뭔 말인지는 알겠는데 쓸 일이 있을지는 현재는 잘 모르겠다. 애초에 선언할 때 float형으로 했으면 된 거 아닌가싶고..