簡體   English   中英

為什么gtk +通過引用傳遞?

[英]Why gtk+ pass by reference?

嗨,我正在C / GTK +中編程,但是我還不明白為什么當我調用gtk_label_set_text (GTK_LABEL (label), "some text");類的函數時gtk_label_set_text (GTK_LABEL (label), "some text"); 例如,我不需要將標簽指針的引用傳遞給該函數。 我了解到C會將所有參數作為值傳遞,然后,該函數將不會影響其他范圍內的Widget標簽。 非常感謝,對不起我的英語不好。

您正在傳遞一個指針。 GTK_LABEL(標簽)只是一個精美的宏,用於強制轉換/檢查“標簽”的類型。 但是它可以與指針一起使用,您可以將指針傳遞給gtk_label_set_text。

同樣,C通過值傳遞一切。 但這是您傳遞值的指針。 指針的副本仍指向相同的“對象”,因此gtk_label_set_text將操縱與調用者相同的對象。

GTK_LABEL()是一個宏,基本上將通用GtkWidget指針轉換為GtkLabel指針。 如果您有一個指向GtkLabel對象的GtkWidget * foo,則GTK_LABEL(foo)含義與(GtkLabel*)foo大致相同。 (添加了檢查后,指向的對象實際上是GtkLabel。)您似乎並不認為這並不意味着GtkLabel小部件中的“標簽”。

在C語言中,如果您需要函數來修改指針(即, 使指針指向另一個內存地址 ),則可以按引用傳遞一個指針( int *pointer; myfunction(&pointer); )。

如果要更改GtkLabel中的文本,則無需更改標簽指針指向的位置。 它已經指向了正確的位置-一個結構可能位於堆的某個位置。 您要做的就是更改該結構的字段之一的值以讀取“某些文本”。 這就是為什么Gtk + API指定在這種情況下,您需要按值傳遞標簽指針的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM