为什么gtk +通过引用传递?

时间:2009-07-16 20:04:32

标签: c gtk

Hii !,我正在使用C / GTK +编程,但我还不明白为什么,当我调用函数时,例如gtk_label_set_text (GTK_LABEL (label), "some text");,我不需要传递标签的引用指向函数的指针。我了解到C将所有参数作为值传递,而该函数不会影响Widget标签,在其他范围内。非常感谢,对不起我的坏英语。

3 个答案:

答案 0 :(得分:3)

你正在传递一个指针。 GTK_LABEL(标签)只是一个花式宏,用于投射/检查'标签'的类型。但它适用于指针,你传递一个指向gtk_label_set_text的指针。

此外,C按值传递所有内容。但它是你传递的指针值。指针的副本仍然指向相同的“对象”,因此gtk_label_set_text将操纵与调用者相同的对象。

答案 1 :(得分:0)

GTK_LABEL()是一个宏,它基本上将通用GtkWidget指针强制转换为GtkLabel指针。如果你有一个指向GtkLabel对象的GtkWidget * foo,GTK_LABEL(foo)只意味着与(GtkLabel*)foo或多或少相同。 (添加了检查,指向对象实际上是GtkLabel。)这并不意味着GtkLabel小部件中的“标签”,正如您所想的那样。

答案 2 :(得分:-2)

在C中,如果需要修改指针的函数,则通过引用(int *pointer; myfunction(&pointer);)传递指针,即使指针指向不同的内存地址

如果要更改GtkLabel中的文本,则无需更改标签指针指向的位置。它已经指向了正确的位置 - 一个可能位于堆上的结构。您要做的就是将结构的某个字段的值更改为“some text”。这就是为什么Gtk + API指定在这种情况下,你需要按值传递你的标签指针。