GTK Gossip: GArray、GPtrArray、GByteArray
来源:互联网 发布:乐器演奏软件 编辑:程序博客网 时间:2024/06/05 23:04
在處理C的陣列時,您必須處理陣列長度的問題,您可以使用GLib的GArray,並搭配各個所提供的函式,在使用陣列上會更為方便,GArray的定義如下:
gchar *data;
guint len;
} GArray;
您有兩種建立GArray的方式:
gboolean clear_,
guint element_size,
guint reserved_size);
GArray* g_array_new(gboolean zero_terminated,
gbooleanclear_,
guint element_size);
g_array_sized_new()的第一個參數zero_terminated設定為TRUE的話,會加入最後一個額外元素,全部的位元都設定為0,clear_設定為TRUE的話,陣列的全部元素會設定為0,element_size則是用來設定每個元素的長度,reserved_size則是用以設定陣列的長度,g_array_new()則是巨集定義的簡化版本,預設長度為0,若加入新的元素,則自動增加陣列長度。
要加入新的元素,可以使用g_array_append_val()函式,要依索引取出元素,則可以使用g_array_index()函式,下面這個程式是個簡單的示範:
- garray_demo.c
#include <glib.h>
int main(int argc, char *argv[]) {
GArray *garray;
gint i;
garray = g_array_new(FALSE, FALSE, sizeof(gint));
for (i = 0; i < 5; i++) {
g_array_append_val(garray, i);
}
for (i = 0; i < 5; i++) {
g_printf("%d/n", g_array_index(garray, gint, i));
}
g_array_free (garray, TRUE);
return 0;
}
執行結果如下:
1
2
3
4
搭配GArray的函式還有g_array_remove_index()、g_array_sort()等,您可以參考 Arrays 的說明。
與GArray類似的是GPtrArray,只不過GArray儲存的是數值(若是structs,則會複製至GArray中),而GPtrArray儲存的是指標,GPtrArray的定義如下:
gpointer *pdata;
guint len;
} GPtrArray;
舉個例子來說,若要儲存GString的指標,則可以如下所示:
- gptrarray_demo.c
#include <glib.h>
int main(int argc, char *argv[]) {
GPtrArray *array;
gint i;
GString *text;
array = g_ptr_array_new();
for (i = 0; i < 5; i++) {
text = g_string_sized_new(5);
g_string_printf(text, "TEST %d", i);
g_ptr_array_add(array, text);
}
for (i = 0; i < 5; i++) {
text = g_ptr_array_index(array, i);
g_printf("%s/n", text->str);
}
g_ptr_array_free(array, TRUE);
return 0;
}
執行結果如下所示:
TEST 1
TEST 2
TEST 3
TEST 4
GByteArray則允許您儲存guint8的資料,用於儲存位元組資料,為GArray的一個簡化形式,其定義如下:
guint8 *data;
guint len;
} GByteArray;
- GTK Gossip: GArray、GPtrArray、GByteArray
- GTK Gossip: Ubuntu 下安裝 GTK
- GTK Gossip: GTK 事件處理函式
- GTK Gossip: GtkTable
- GTK Gossip: 簡介 Glade
- GTK Gossip: GtkMessageDialog
- GTK Gossip: GtkAboutDialog
- GTK Gossip: GtkEntry
- GTK Gossip: GtkSpinButton
- GTK Gossip: GtkTextView
- GTK Gossip: GtkComboBox
- GTK Gossip: GtkNotebook
- GTK Gossip: GtkPaned
- GTK Gossip: GtkScrolledWindow
- GTK Gossip: GtkHandleBox
- GTK Gossip: GtkUIManager
- GTK Gossip: GtkProgressBar
- GTK Gossip: GtkToolBar
- c#写cookie,服务器跟用户端时间不一致,火狐可能读取不到
- 获取CPU使用率
- WM 6.5 下图标的显示
- Windows编程的Unicode&ANSI字符串转换--摘自VCKBASE
- 反汇编命令及elf,bin,hex之间的转换
- GTK Gossip: GArray、GPtrArray、GByteArray
- QTP10-插件破解脚本
- hangye5:2345导航将出嫁史玉柱 网址站出路大盘点
- GTK Gossip: GSList、GList
- GTK Gossip: GHashTable
- MySQL 1130 错误
- 最简单的GDI+程序代码
- GTK Gossip: GTree 與 GNode
- PHP会话控制之session--实例