У меня есть массив имен меток FlagEnt [NFLAGS], и я хочу назначить GtkWidget * для массива флиртов [NFLAGS]. Я пытался сделать это так:
for (i = 0; i < NFLAGS; i++)
flentry[i] = GTK_WIDGET(gtk_builder_get_object(builder, FlagEnt[i]));
Это не сработало, и я получил:
(gdb) p flentry
$1 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
, а не массив указателей, которые я ожидал, поэтому я посмотрел на то, как должен выглядеть фленри:
(gdb) p &flentry
$3 = (GtkWidget *(*)[8]) 0x5555557cdb60 <flentry>
Я заметил дополнительный * в определении; это должно быть из-за того, что я объявил flentry как:
static GtkWidget * flentry[NFLAGS];
ie как массив. Я проверил эту гипотезу с:
static GtkWidget * tflentry
tflentry = GTK_WIDGET(gtk_builder_get_object(builder, FlagEnt[0]));
(gdb) p tflentry
$1 = 0x555555aa1d60
(gdb) p *tflentry
$2 = {parent_instance = {g_type_instance = {g_class = 0x5555558e9110}, ref_count = 1, qdata = 0x555555aabdf0}, priv = 0x555555aa1c70}
И, Эй, Престо! Tflentry подходит как правильный указатель. Проблемы с массивом, то есть. Затем я попытался напрямую назначить элемент массива указателю, который, как я знал, работал:
static GtkWidget * tflentry
tflentry = GTK_WIDGET(gtk_builder_get_object(builder, FlagEnt[0]));
flentry[0] = tflentry;
(gdb) p tflentry
$2 = 0x555555ab2a00
(gdb) p flentry[0]
$8 = 0x0
Я не знаю, как назначить указатель tflentry для массива flentry [].
Кто-нибудь может дать мне подсказку? :)