long double | gldouble |
void* | gpointer |
Для использования этих типов данных, как и прочих возможностей библиотеки Glib, необходимо подключить заголовочный файл glib.h.
23.2.2. Функции для работы с памятью
Функции для работы с памятью библиотеки Glib выполняют те же действия, что и соответствующие им функции языка С. Вот их прототипы:
gpointer g_malloc(gulong size);
gpointer g_realloc(gpointer mem, gulong size);
void g_free(gpointer mem);
23.2.3. Строки и Glib
Библиотека Glib содержит довольно много функций для работы со строками, но я перечислю лишь самые с моей точки зрения интересные (таблица 23.2).
Некоторые строковые функции библиотеки Glib Таблица 23.2
Прототип | Описание |
---|---|
gchar* g_strchug(gchar* s) | Функция удаляет все пробелы в строке s, стоящие в начале строки (до первого печатного символа). Данная функция может пригодиться для контроля введенной пользователем информации |
gchar* g_strchomp(gchar* s) | Функций удаляет все пробелы в строке s, стоящие в конце строки |
gchar* g_strstrip(gchar* s) | Функция удаляет пробелы а начале и в конце строки |
void g_strdown(gchar* s) | Функция переводит все буквы строки s в нижний регистр |
void g_strup(gchar* s) | Функция переводит все буквы строки s в верхний регистр |
void g_strreverse(gchar* s) | Функция преобразовывает прописные буквы в строчные и наоборот |
23.2.4. Списки
Библиотека Glib содержит средства для работы с одно- и двусвязными списками. Особенность двусвязного списка заключается в том, что по нему можно перемещаться в обоих направлениях — назад и вперед. В файле gslist.h (Glib Single List) описаны средства для работы с односвязными списками, а в файле glist.h — для работы с двусвязным списком.
Вот структуры односвязного и двусвязного списков:
// односвязный список
typedef struct _GSList GSList;
struct _GSList {
gpointer data;
GSList *next; // указатель на следующий элемент списка
};
// двусвязный список
typedef struct _GList GList;
struct _GList {
gpointer data;
GList *next; // указатель на следующий элемент списка
GList *prev; // указатель на предыдущий элемент списка
};
Поле data предназначено для хранения данных списка, причем они могут быть любого типа, ведь gpointer — это тип void*.
Работать со списками очень просто. Для начала нужно объявить список:
GList *list = NULL;
GSList *slist = NULL;
Затем добавить элементы в список. Это можно сделать с помощью двух функций — g_list_append() или g_slist_prepend() — в зависимости от используемого типа списка:
gchar *el = g_strdup('это первый элемент');
list = g_list_append(list, el);
Функции g_list_append() и g_slist_append() добавляют элемент в конец списка. Если вы хотите добавить элемент в начало списка, нужно использовать функции:
g_list_prepend(GList *list, gpointer data);
g_slist_prepend{GSList *list, gpointer data);