Почему я не могу передать постоянные массивы в качестве аргументов?
В C, почему я не могу сделать это:
arrayfn({1.0, 2.0, 3.0});
если arrayfn
некоторая функция, которая принимает один параметр типа double[]
или же double*
, какой бы ни. Попытка этого дает мне синтаксическую ошибку.
Есть ли способ, которым я мог бы достичь чего-то в C, например, - генерировать и немедленно передавать массив, известный во время компиляции - чтобы избежать необходимости тратить строку кода, предварительно объявив и заполнив ее?
1 ответ
Краткий ответ: вам нужно использовать составной литерал. Что-то вроде
arrayfn( (double[]) {1.0, 2.0, 3.0} );
должен сделать работу.
Некоторое объяснение
Подойдя к части, почему arrayfn({1.0, 2.0, 3.0});
не работал, потому что без синтаксиса для составных литералов, {1.0, 2.0, 3.0}
это закрытый список инициализаторов Он не обозначает "объект", который можно использовать в качестве аргумента функции. Они не являются"постоянными массивами", как вы могли подумать.
Чтобы добавить больше информации, цитирование C11
Глава §6.5.2.5, Составные литералы
Постфиксное выражение, которое состоит из имени типа в скобках, за которым следует заключенный в скобки список инициализаторов, является составным литералом. Он предоставляет неназванный объект, значение которого задается списком инициализатора.