У меня есть следующая проблема: Мне нужно инициализировать номер столбца, который представляет число, для этого ему необходимо указать его значение, количество делителей и самих делителей. Чтобы хранить делители, мне нужно использовать указатель на массив целых чисел, и здесь начинается проблема.Инициализация указателя на массив целых чисел.
typedef struct {
int value;
int divisor_amount;
int (*divisors)[];
} Number;
Теперь, так как я не знаю заранее, сколько делителей мой номер posseses Я не могу дать длину в массив.
В основной функции я присваиваю каждому из этих полей значение. Для первых двух переменных это не проблема.
Number six;
six.value = 6;
six.divisor_amount = 3;
Теперь для указателя я не знаю, как его инициализировать. Во время занятий он сказал, чтобы сделать это как:
six.divisors[0] = 1;
six.divisors[1] = 2;
six.divisors[2] = 3;
, но затем я получаю эту erroy от компилятора:
[Error] invalid use of array with unspecified bounds
Так что я подумал, что мне нужно назначить некоторое пространство и попробовал:
six.divisors = malloc(six.divisor_amount*sizeof(int));
Но это дает мне просто еще одна ошибка:
[Warning] assignment from incompatible pointer type [enabled by default]
'int (* divisors) [];' вероятно, не то, что вы хотите иметь. Если вы хотите иметь указатель на массив, просто напишите 'int * divisors;', а затем 'malloc' во время инициализации – UnholySheep
Я не могу воспроизвести предупреждение. Поскольку 'six.divisors' является (нефункцио- нальным) типом указателя, это должно работать. Сообщение об ошибке для первого фрагмента совпадает с сообщением 'gcc -std = c99', но я не получаю второй. Как вы скомпилируете? – mafso
Я использую devcpp с включенным -Wpedantic. – Actaeonis