Hii !,私はC/GTK +でプログラミングしていますが、なぜ私が関数を呼び出すと、gtk_label_set_text (GTK_LABEL (label), "some text");
のように、関数へのラベルポインタの参照を渡す必要はありません。私は、Cがすべての引数を値として渡したことを知りました。関数はウィジェットのラベルに影響しません。ありがとう、と私の悪い英語を残念。なぜgtk +が参照渡しになるのですか?
答えて
あなたはポインタを渡しています。 GTK_LABEL(label)は、 'label'の型をキャスト/チェックする単なる空想的なマクロです。しかし、それはポインタで動作し、あなたはgtk_label_set_textへのポインタを渡しています。
また、Cは値をすべて渡します。しかし、それは値として渡すポインタです。ポインタのコピーは同じ 'オブジェクト'を指しているので、gtk_label_set_textは呼び出し元と同じオブジェクトを操作します。 Cにおいて
、あなたがポインタを変更する機能が必要な場合は、参照(int *pointer; myfunction(&pointer);
)によってポインタを渡す、すなわちは異なるメモリアドレスへのポインタポイントを作ります。
GtkLabelのテキストを変更したい場合は、ラベルポインタがどこを指すかを変更する必要はありません。既に適切な場所、つまりおそらくヒープのどこかにある構造体を指しています。あなたがしたいのは、構造体のフィールドの1つの値を "some text"と読み替えるだけです。これが、Gtk + APIがこの場合、ラベルポインタを値渡しする必要があることを指定する理由です。
GTK_LABEL()は、基本的にGtkLabelポインタに汎用GtkWidgetポインタをキャストするマクロです。 GtkLabelオブジェクトを指すGtkWidget * fooを持っている場合、GTK_LABEL(foo)
は、(GtkLabel*)foo
と多かれ少なかれ同じ意味です。 (ポイント付きのオブジェクトが実際にGtkLabelであるというチェックが追加されています).GtkLabelウィジェットの「ラベル」を意味するものではありません。
- 1. なぜ参照渡しが良いですか?
- 2. Javaで、このTreeSetが参照渡しであるのはなぜですか?
- 3. PHP 7で$ _SESSIONが参照渡されるのはなぜですか?
- 4. 配列を返すPHP関数:なぜ参照渡しが必要ですか?
- 5. なぜ可変参照ではなく、BufReaderへの不変参照を渡すだけですか?
- 6. Assembly.GetTypes()に参照が必要なのはなぜですか?
- 7. C++に "NULL参照"がないのはなぜですか?
- 8. 参照渡しと参照渡し
- 9. なぜC++の関数に参照でファイルを渡すべきですか?
- 10. 参照渡しですか?
- 11. 「未定義の参照」がないのはなぜですか?
- 12. なぜこのプログラムは参照によってパラメータを渡すのですか?
- 13. findメソッドがモデルクラスを参照するのはなぜですか?
- 14. 機能が参照渡し
- 15. ディクショナリ値への直接参照を関数に渡すことができないのはなぜですか?
- 16. 参照のコピーローカルプロパティが無効になっているのはなぜですか?
- 17. 参照渡しは単なる遺産ですか?
- 18. なぜmake_nvpに非const参照が必要ですか?
- 19. const参照で一時的に渡すときにコピーコンストラクタが呼び出されるのはなぜですか?
- 20. Firebaseデータベース:照会されたdatasnapshotのキー/参照がその親を参照するのはなぜですか?
- 21. オブジェクト参照引数をスレッド関数に渡すのがコンパイルに失敗するのはなぜですか?
- 22. ヌル参照解除でプログラムがクラッシュしないのはなぜですか?
- 23. メソッド参照がこれで動作しないのはなぜですか?
- 24. replaceAllが「不正なグループ参照」で失敗するのはなぜですか?
- 25. なぜwp_postmetaへの参照が遅いのですか?
- 26. プライマリキーを参照できないのはなぜですか?
- 27. attr `android:popupEnterTransition`を参照できないのはなぜですか?
- 28. このオブジェクト参照が機能しないのはなぜですか?
- 29. Resharperが私のWeb参照を認識しないのはなぜですか?
- 30. なぜQtコードのQCharがconst参照の代わりに値によって渡されるのですか?