2021.11.08 TIL
Struct의 다양한 활용
링크드리스트
링크드리스트는 포인터 head로부터 이어지는 데이터가 연결돼서 꼬리에 꼬리를 무는 방식으로, 데메모리의 한도 내에서 계속해서 늘어날 수 있는 구조다.
사진과 같이 코드를 짜게 되면,
다음과 같은 구조를 만들 수 있다. 게속해서 늘어날 수 있는 형태를
다음처럼 for문, while 문을 활용해 각각 만들 수 있다.
pre와 post 두 포인터를 이용해 하나의 더미struct를 만들고, post와 pre가 다음의 struct를 하나씩 가리키며 데이터를 입력하거나, free 시키거나, 대입하고 이용할 수 있다.
class 구조체
class 는 이름이 붙고, 변수와 함수를 선언할수 있는 구조체이다. 변수의 대입,연산 그리고 함수의 호출은 불가능하다.
class는 선언을 하고 class 이름으로 변수를 선언해서 인스턴스라는 문장을 대입하면 그 변수가 참조형 변수 (reference)로 지정되고 사용할 수 있게 된다.
참조형 변수를 통해 class 에서 선언된 변수명에 접근할 수 있고 대입된 참조형 변수를 통해서 class에서 선언된 함수를 호출할 수 있다.
위 코드에서 new Temp() 가 인스턴스에 해당하고
t.data 라는 참조형변수를 통해 t.add 라는 함수를 호출할 수 있게 된다.
객체지향언어
위 코드 부분에서 1,2,3으로 나뉜 부분에 대한 이해가 필요하다.
1.struct를 선언할때 data 라고하는 int 변수를 젖아하는 공간, add라는 함수 포인터를 저장하는공간을 Temp 라는 구조체에 선언하게 된다
2.Temp_add 라는 함수를 선언한다.
3. new_Temp라는 구조체 Temp 포인터를 선언하고 해당 타입의 포인터인 tmp라는 변수를 선언한다. tmp는 malloc 을 통해 메모리를 할당받고 그를통해서 add 함수포인터가 Temp_add함수를 가리키면서 1,2번 코드가 연결된다. 또한 tmp->data의 초기값을 입력해주기도 한다.
t= new_Temp(); 를 통해서 해당 구조체를 호출하게되면 메모리를 할당해 1,2번이 실체가 있는 데이터가 된다.