【发布时间】:2021-11-10 14:49:11
【问题描述】:
我想将整数列表numbers 传递给回调函数printer,它会在按下按钮时打印numbers 的内容。 this 论坛帖子中的最后一篇帖子建议我这样做:
#include <gtk/gtk.h>
static void printer(GtkButton *button, gpointer user_data)
{
int *array = user_data;
g_print("%d %d %d %d %d\n", array[0], array[1], array[2], array[3], array[4]);
}
static void activate(GtkApplication *app, gpointer user_data)
{
GtkWidget *win;
GtkWidget *box;
GtkWidget *button;
// initialize numbers
int numbers[5] = {2, 3, 5, 7, 11};
// window
win = gtk_application_window_new(GTK_APPLICATION(app));
gtk_window_set_title(GTK_WINDOW(win), "Printer");
gtk_window_set_default_size(GTK_WINDOW(win), 80, 80);
// box
box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
gtk_window_set_child(GTK_WINDOW(win), box);
// button
button = gtk_button_new_with_label("Test");
g_signal_connect(button, "clicked", G_CALLBACK(printer), (gpointer) numbers);
gtk_box_append(GTK_BOX(box), button);
gtk_window_present(GTK_WINDOW(win));
}
int main (int argc, char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new("com.example.printer", G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
status = g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
return status;
}
但是,当我尝试执行此操作时,程序输出:
0 0 0 32583 0
如果回调函数在打印之前修改了数组的内容,那么打印的结果就是正确的:
static void printer(GtkButton *button, gpointer user_data)
{
int *array = user_data;
array[0] = 3;
array[1] = 2;
array[2] = 1;
array[3] = 0;
array[4] = -1;
g_print("%d %d %d %d %d\n", array[0], array[1], array[2], array[3], array[4]);
}
这会按预期输出3 2 1 0 -1。
我不确定为什么array[x] 在这两种情况下都不同。这是将数组传递给回调函数的推荐方式吗?为什么array[x] 在两种情况下都返回不同的值?
【问题讨论】:
标签: arrays c pointers callback gtk