Почему я не могу передать постоянные массивы в качестве аргументов?

В 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, Составные литералы

Постфиксное выражение, которое состоит из имени типа в скобках, за которым следует заключенный в скобки список инициализаторов, является составным литералом. Он предоставляет неназванный объект, значение которого задается списком инициализатора.

Другие вопросы по тегам