c使用数据字段GTK g_signal_connect

时间:2017-04-09 07:06:48

标签: c gtk3

使用g_signal connect,我正在尝试使用“data”字段传递一个简单字符“S”的参数。

???(我想我明白该字段不是用于数据,而是用于指向数据的指针。)???

无论如何,我有这样的代码:

g_signal_connect (G_OBJECT(b_save), "clicked", my_test, (gpointer) 'S');

调用这样的代码:

void my_test(GtkMenuItem *menuitem, gpointer data)
{
  printf("Pointer variable contains: %p\n", data);
}

我不确定my_test是否应该接受两个参数? 我不确定如何printf指向值'S'。 (在我的调用函数my_test中,我如何得到'S'?)

1 个答案:

答案 0 :(得分:0)

non-www是一个字符常量。与字符串文字不同,字符常量不可寻址,它们只是伪装的数字。因此,回调中的数据参数不包含指向'S'的指针(不超过它可以包含指向常量'S'的指针),而是将常量的值重新解释为1

如果您的C实现保证整数和指针之间的一对一映射,您可以保留您的设置,并让您的回调打印如下:

gpointer

如果要传递地址,则需要传递某些存储的地址。更重要的是,在执行回调之前不会过期的存储。动态分配内存可能是最好的,但您也可以传递静态变量的地址:

printf("Data variable contains: %c\n", (char)data); // char and NOT char*