gpt4 book ai didi

c GTK g_signal_connect 使用数据字段

转载 作者:行者123 更新时间:2023-11-30 16:47:33 26 4
gpt4 key购买 nike

通过 g_signal connect,我尝试使用“数据”字段传递一个简单字符“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 是否应该接受两个参数还是一个?我不知道如何打印指向值“S”。(在我调用的函数 my_test 中,如何获取“S”?)

最佳答案

'S' 是一个字符常量。与字符串文字不同,字符常量是不可寻址的,它们只是伪装的数字。因此,回调中的 data 参数不包含指向 'S' 的指针(最多只能包含指向常量 1 的指针),而是常量的值被重新解释为 gpointer

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

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

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

static char data = 'S';
g_signal_connect (G_OBJECT(b_save), "clicked", my_test, &data);
// ...
printf("Data variable contains: %c\n", *(char*)data); // Now data is a pointer to a single character.

关于c GTK g_signal_connect 使用数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43303990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com