2009-07-16 22 views
1

Hii !,私はC/GTK +でプログラミングしていますが、なぜ私が関数を呼び出すと、gtk_label_set_text (GTK_LABEL (label), "some text");のように、関数へのラベルポインタの参照を渡す必要はありません。私は、Cがすべての引数を値として渡したことを知りました。関数はウィジェットのラベルに影響しません。ありがとう、と私の悪い英語を残念。なぜgtk +が参照渡しになるのですか?

答えて

3

あなたはポインタを渡しています。 GTK_LABEL(label)は、 'label'の型をキャスト/チェックする単なる空想的なマクロです。しかし、それはポインタで動作し、あなたはgtk_label_set_textへのポインタを渡しています。

また、Cは値をすべて渡します。しかし、それは値として渡すポインタです。ポインタのコピーは同じ 'オブジェクト'を指しているので、gtk_label_set_textは呼び出し元と同じオブジェクトを操作します。 Cにおいて

-2

、あなたがポインタを変更する機能が必要な場合は、参照(int *pointer; myfunction(&pointer);)によってポインタを渡す、すなわちは異なるメモリアドレスへのポインタポイントを作ります。

GtkLabelのテキストを変更したい場合は、ラベルポインタがどこを指すかを変更する必要はありません。既に適切な場所、つまりおそらくヒープのどこかにある構造体を指しています。あなたがしたいのは、構造体のフィールドの1つの値を "some text"と読み替えるだけです。これが、Gtk + APIがこの場合、ラベルポインタを値渡しする必要があることを指定する理由です。

0

GTK_LABEL()は、基本的にGtkLabelポインタに汎用GtkWidgetポインタをキャストするマクロです。 GtkLabelオブジェクトを指すGtkWidget * fooを持っている場合、GTK_LABEL(foo)は、(GtkLabel*)fooと多かれ少なかれ同じ意味です。 (ポイント付きのオブジェクトが実際にGtkLabelであるというチェックが追加されています).GtkLabelウィジェットの「ラベル」を意味するものではありません。

関連する問題