char* data1 = "aaa";
char* data2 = "bbb";
char* data3 = "ccc";
GList* list = NULL;
list = g_list_append(list, data1); /*리턴값을 list로 다시 받는 것이 중요! */
list = g_list_append(list, data2);
list = g_list_append(list, data3);
라고하면 3개의 엔트리가 더블링크로 저장되어 있겠죠?
여기서 위의 함수들을 테스트 삼아 돌려보면:
단 gpointer data에는 아무데이터나 들어가도 상관없습니다.
주로 동적으로(g_new/malloc등으로) 할당한 구조체의 포인터가 많이 쓰이지만, 포인터와 사실상 같은 (32비트)정수형을 직접 저장할수도 있습니다.
(이때 GPOINTER_TO_INT, GINT_TO_POINTER등의 매크롤 쓰면 편합니다)
주의할 점은:
1. 동적으로 할당한 포인터라면 사용자 쪽에서 data를 해제해주어야 합니다.
2. 리스트를 변형 시키는 (g_list_append/remove등등)함수들의 리턴값은 변형된 후의 리스트이므로 위의 예처럼 다시 할당해주셔야합니다. (관행적으로 많이 쓰이는 방법이라고 알고 있습니다)
그리고 정수형을 저장한경우가 아니라면(대부분의 경우죠) g_list_find는 별로 효용성이 없을껍니다. 내용을 비교하는게 아니라 포인터값 직접비교니까요.
(위의 예에선 data1,2,3변수가 아직 유효할꺼라는 가정하에 저렇게 한것 뿐입니다) 대부분의 경우에는 g_list_find_custom을 많이 사용하시게 될껍니다.
위의 경우로 예를 들어보면
딱히 사용법이라고 할만한것도 없습니다.이름 그대로지요.[cod
딱히 사용법이라고 할만한것도 없습니다.
이름 그대로지요.
라고하면 3개의 엔트리가 더블링크로 저장되어 있겠죠?
여기서 위의 함수들을 테스트 삼아 돌려보면:
단 gpointer data에는 아무데이터나 들어가도 상관없습니다.
주로 동적으로(g_new/malloc등으로) 할당한 구조체의 포인터가 많이 쓰이지만, 포인터와 사실상 같은 (32비트)정수형을 직접 저장할수도 있습니다.
(이때 GPOINTER_TO_INT, GINT_TO_POINTER등의 매크롤 쓰면 편합니다)
주의할 점은:
1. 동적으로 할당한 포인터라면 사용자 쪽에서 data를 해제해주어야 합니다.
2. 리스트를 변형 시키는 (g_list_append/remove등등)함수들의 리턴값은 변형된 후의 리스트이므로 위의 예처럼 다시 할당해주셔야합니다. (관행적으로 많이 쓰이는 방법이라고 알고 있습니다)
그리고 정수형을 저장한경우가 아니라면(대부분의 경우죠) g_list_find는 별로 효용성이 없을껍니다. 내용을 비교하는게 아니라 포인터값 직접비교니까요.
(위의 예에선 data1,2,3변수가 아직 유효할꺼라는 가정하에 저렇게 한것 뿐입니다) 대부분의 경우에는 g_list_find_custom을 많이 사용하시게 될껍니다.
위의 경우로 예를 들어보면
즉, ==연산자대신 사용자가 정의한 비교함수를 사용하게 하는 것이죠.
실제로 쓰시다 보면, iteration함수인 g_list_foreach()도 많이 사용하시게될겁니다.
----
the smile has left your eyes...
아 한가지 헷갈리는 부분을 빼먹었네요.최소에 GList를 생성하기 위
아 한가지 헷갈리는 부분을 빼먹었네요.
최소에 GList를 생성하기 위해서 g_list_new같은 걸 하지 않습니다.
물론 g_list_alloc도 안하죠.
GList은 클래스(또는 GObject)가 아니고 그냥 구조체입니다.
빈 리스트를 만드는 것은 GList* list = NULL; 로 충분합니다.
그럼 이만=3=3=33
----
the smile has left your eyes...
질문하신분께서는 GTK 공부를 최근에 열심히 하시는듯 보입니다만,GU
질문하신분께서는 GTK 공부를 최근에 열심히 하시는듯 보입니다만,
GUI 에 너무 마음이 앞서 보이시는듯 합니다.
지금 질문경우는 Linked List 를 한번이라도 만들어 보았다면 익숙할텐데요.
다른 기초도 같이 공부를 하셔야, 지금 하시는 공부가 더욱 보람찰듯 합니다.
삽질의 대마왕...
설명과 충고. 모두 감사합니다.
C언어도 제대로 모르는 상태라서 힘들군요.
리눅스도 처음이고, GTK도 처음이라서요.
열심히 공부해서 잘 사용하고 싶네요.
댓글 달기