URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8250
[ Назад ]

Исходное сообщение
"начальная инициализация структуры с безразмерным массивом"

Отправлено Cont , 06-Май-09 01:34 
Можно инициализировать безразмерный массив int a[]={1,2,3};

Можно инициализировать структуру с массивом заданной размерности
struct s{
  int i;
  int a[3];
} x={3,{1,2,3}};

Но как быть, если размер массива не указан?
struct s{
  int i;
  int a[];
} x={3,{1,2,3}};
Это уже не работает. Похоже, никак?


Содержание

Сообщения в этом обсуждении
"начальная инициализация структуры с безразмерным массивом"
Отправлено const86 , 06-Май-09 01:58 
Такие структуры положено "инициализировать" примерно так:
struct s *p = malloc(sizeof(*p) + sizeof(int) * 3);
p->i = 3;
p->v[0] = 1;
...

"начальная инициализация структуры с безразмерным массивом"
Отправлено Cont , 06-Май-09 02:07 
Понимаю, но хочется сразу. :)

"начальная инициализация структуры с безразмерным массивом"
Отправлено Heretic , 06-Май-09 12:39 
>Понимаю, но хочется сразу. :)

Не написано у вас на каком языке вы пишете, поэтому ориентируюсь на С++.
А почему STL не использовать? Vector позволяет это сделать, если не ошибаюсь. =)


"начальная инициализация структуры с безразмерным массивом"
Отправлено Cont , 06-Май-09 17:49 
>Не написано у вас на каком языке вы пишете, поэтому ориентируюсь на
>С++.
>А почему STL не использовать? Vector позволяет это сделать, если не ошибаюсь.
>=)

C.


"начальная инициализация структуры с безразмерным массивом"
Отправлено chainik , 06-Май-09 20:03 
>[оверквотинг удален]
>  int i;
>  int a[3];
>} x={3,{1,2,3}};
>
>Но как быть, если размер массива не указан?
>struct s{
>  int i;
>  int a[];
>} x={3,{1,2,3}};
>Это уже не работает. Похоже, никак?

Никак. Иначе - это уже не C

int a[]={1,2,3}; инициализирует массив из ТРЕХ элементов.

#include <stdio.h>
main() {
  int m[]= {1,2,3};
  int v = 10;
  m[3]= 5;
  printf( "%d\n", v);
}
Программа, очевично, выдает 5.


"начальная инициализация структуры с безразмерным массивом"
Отправлено anonymous , 11-Май-09 18:43 
>  m[3]= 5;

UB