Почему gtk + передают по ссылке? - PullRequest
1 голос
/ 17 июля 2009

Hii !, я программирую на C / GTK +, но я пока не понял, почему, когда я вызываю функцию, например, gtk_label_set_text (GTK_LABEL (label), "some text");, мне не нужно передавать ссылку на указатель метки на функция. Я узнал, что C передает все аргументы как значение, чем функция не влияет на метку Widget, в другой области видимости. Большое спасибо, и извините за мой плохой английский.

Ответы [ 3 ]

3 голосов
/ 17 июля 2009

Вы передаете указатель. GTK_LABEL (метка) - это просто модный макрос, который приводит / проверяет тип «метки». Но это работает с указателями, вы передаете указатель на gtk_label_set_text.

Кроме того, C передает все по значению. Но это указатель, который вы передаете в качестве значения. Копия указателя по-прежнему указывает на тот же «объект», поэтому gtk_label_set_text будет манипулировать тем же объектом, что и вызывающий объект.

0 голосов
/ 02 февраля 2010

GTK_LABEL () - это макрос, который в основном приводит общий указатель GtkWidget к указателю GtkLabel. Если у вас есть GtkWidget * foo, который указывает на объект GtkLabel, GTK_LABEL(foo) означает более или менее то же самое, что и (GtkLabel*)foo. (С добавленными проверками того, что указанным объектом на самом деле является GtkLabel.) Это не означает «метка» в виджете GtkLabel, как вы, кажется, думаете.

0 голосов
/ 17 июля 2009

В C вы передаете указатель по ссылке (int *pointer; myfunction(&pointer);), если вам нужна функция для изменения указателя, то есть делает указатель указателем на другой адрес памяти .

Если вы хотите изменить текст в GtkLabel, нет необходимости изменять, куда указывает указатель метки. Это уже указывает на правильное место - структура, которая, вероятно, где-то в куче. Все, что вы хотите сделать, это изменить значение одного из полей структуры, чтобы прочитать «некоторый текст». И именно поэтому API Gtk + указывает, что в этом случае вам нужно передать указатель метки по значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...