cgtk警告: initialization makes integer from pointer

标签 c pointers gtk

如何从 gpointer 获取变量以便我可以使用它。

void
right_y (GtkButton *button, gpointer on)
{
   right(on);
}

这里是回调部分 带有 char = "y"的行;给出警告:初始化从指针生成整数而不进行强制转换 [-Wint-conversion]

gsignal 行给出警告:从不同大小的整数转换为指针 [-Wint-to-pointer-cast]

char on = "y";
button = gtk_button_new_with_label ("Led On");                        
g_signal_connect (button, "clicked", G_CALLBACK (right_y), (gpointer) on);

我尝试了几种不同的方法,但仍然无法得到它。

谢谢。

最佳答案

char on = "y";

声明on为保存单个char。字符串不止一个 char,因此您需要将它们存储为指向 char 的指针或指向 char 数组的指针。

问题是您希望能够使用 on 执行的操作确定要使用的正确类型。但我想考虑到帖子中错误的性质,您已经知道这一点并且对 gpointer 感到困惑。

gpointer 基本上是

typedef void *gpoiner;

这就是为什么您不需要使用 gpointer 指定 * 的原因。别让这个欺骗了你;当您在 gpointer 旁边使用其他指针类型时,您仍然需要这些其他指针类型上的 *!

此外,g_signal_connect() 行也是错误的; gpointer on 没有任何意义。

如果您仍然不明白我在说什么,请告诉我。

<小时/>

好吧,那为什么呢

char on = "y";

吐出消息

warning: initialization makes integer from pointer without a cast [-Wint-conversion]

"y" 是一个指针。它的计算结果为 const char * 类型的表达式。该指针可能驻留在可执行文件的代码部分,无法对其进行修改(因此是 const)。

char 是一个整数,而不是指针。除非您明确要求,否则通常不应该将指针值插入整数,因为您可能最终使用的整数类型太小而无法存储指针。 (对于那些有必要的时候,C 标准提供了 intptr_tuintptr_t。)在这种情况下,您没有询问,因此编译器希望确保您实际上意味着您想将指针的地址放入 char 中。

请注意有关使用比必要的更小的整数的部分。这就是为什么您的 g_signal_connect() 行会打印这样的警告:char 不够大,无法存储指针,因此将 char 值视为指针必然会产生非常糟糕的结果。

关于cgtk警告: initialization makes integer from pointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41798052/

相关文章:

c++ - 读取变量作为执行时的参数

c++ - 脚本引擎 - 调用 "unknown"函数

c - 如何使用指向二维字符数组的指针?

c++ - 在函数之间的堆上传递数组时导致此运行时错误的原因,c++

c - 使用 Glade 和 GTK 将切换按钮相互绑定(bind)(在 C 中)

c - 实现一个独特的函数以在 C 中以正确的格式输出数据列表

c - 在 C 中拆分 ASCII 文本文件

C- 指针、数组和结构之间的交互

python - 如何使 gtk.Layout 透明

linux - GTK+ 安装