Вызов функции sum(int [], arr_size)
в заявлении«Составные литералы» в качестве аргумента
total = sum((int []){1,2,3,4,5}, 5);
Соединение Буквальное(int []){1,2,3,4,5}
передается в качестве аргумента. Ясно, что длина массива определяется числами элементов в буквальном (это, конечно, 5
). Тогда в чем еще нужно пропустить 5
?
мы не можем определить выше функции как
sum(int []) {....}
и затем вызвать его как
total = sum((int []){1,2,3,4,5})
?
Получил это человек! Вы определили размер массива в определении функции, и именно поэтому вы не передаете размер, верно? – haccks
@haccks: Да. Таким образом, ваши варианты либо фиксируют размер, либо передают размер отдельно. Также обратите внимание, что в моей версии массив передается через параметр «указатель на массив». Вот почему в вызове есть '&'. И внутри функции массив должен быть доступен как '(* a) [i]', а не как 'a [i]'. – AnT
@haccks: Почти каждый раз, когда вы имеете дело с массивами, вы должны использовать указатели. Рекомендуемое чтение: раздел 6 [comp.lang.c FAQ] (http://www.c-faq.com/). –