PassingArray
допустимо, но не передает массив. Он передает указатель на первый элемент массива. void PassingArray(int arr[])
является запутанным синонимом для void PassingArray(int *arr)
. Вы не можете передать массив по значению в C.
ReturningArray
недопустимо, вы не можете вернуть массив по значению в Си. Обычный обходной путь - вернуть структуру, содержащую массив:
typedef struct ReturnArray {
int contents[5];
} ReturnArray;
ReturnArray ReturningArray()
{
ReturnArray x = {{1, 2, 3, 4, 5}};
return x;
}
Массивы являются гражданами второго сорта в C, тот факт, что они не могут быть переданы или возвращены по значению, исторически связан с тем фактом, что они не могут быть скопированы по присваиванию. И, насколько я знаю, причина этого кроется в ранней разработке C, задолго до того, как он был стандартизирован, когда еще не было решено, как будут работать массивы.