有一个很棒的C库叫GLib.https://docs.gtk.org/glib/index.html,我很喜欢它,里面有一个叫GList的结构,它是一个动态增长的结构(类似于向量)。使用g_list_append(GList* list,gpointer* pointer)函数我可以在这里添加新元素但是有一个问题。如果我想添加一个Integer我可以使用GINT_TO_POINTER宏但是没有GFLOAT_TO_POINTER(但gfloat是glib中的一种类型)。我不想为一个float分配内存。我如何将一个float添加到一个GList中?
#include <stdio.h>
#include "glib.h"
#include <stdbool.h>
int main() {
int num = 10;
gchar* str = g_strdup("Hello");
GList* list_name = NULL;
list_name = g_list_append(list_name, GINT_TO_POINTER (4 + num * 3));
list_name = g_list_append(list_name, "Hello");
list_name = g_list_append(list_name, str);
list_name = g_list_append(list_name, GINT_TO_POINTER(num));
list_name = g_list_append(list_name, GINT_TO_POINTER((int)true));
list_name = g_list_append(list_name, GINT_TO_POINTER((int)false));
printf("%d\n", *(int*)(g_list_nth(list_name, 0)));
printf("%s\n", (gchar*)g_list_nth(list_name, 1)->data);
printf("%s\n", (gchar*)g_list_nth(list_name, 2)->data);
printf("%d\n", *(int*)(g_list_nth(list_name, 3)));
printf("%d\n", *(int*)(g_list_nth(list_name, 4)));
printf("%d\n", *(int*)(g_list_nth(list_name, 5)));
g_free(str);
g_list_free(list_name);
return 0;
}
~
这是我如何将int,bool或string添加到glist中,但我不知道如何将float添加到列表中。
1条答案
按热度按时间0sgqnhkj1#
我怀疑没有
GFLOAT_TO_POINTER
宏的原因是因为GLib支持的所有平台都不能保证浮点数与指针的位数相同或小于指针。(参见Ghashtable storing double)尽管如此,看看你的代码示例,你似乎最好使用一个结构体,因为它看起来像你的列表是固定大小的,你希望在某些索引处有某些类型。类似于这样: