В C. нет такой вещи, как ссылка.
Передача указателя на функцию не скопирует объект, на который указывает указатель.
void foo(int* array);
После этого вы можете получить доступ к элементам путем выделения указателя.
int a = *array; //dereferencing the pointer. Getting the first element.
int b = array[0]; // does the same thing.
int c = *(array + 1) // second element. Pointer shifts by 1 * sizeof(type) bytes
int d = array[1] // second element again
Передача указателя, подобного этой, имеет те же издержки, что и передача целого числа с размером слова (поскольку указателивнизу целые числа).
Если вы хотите передать указатель на массив, вы должны передать его как двойной указатель **
.Это почти будет действовать как передача его в качестве ссылки, поскольку вы можете изменить указатель в функции.
Вариант использования:
void foo(int** array) // passing a double pointer
{
//....
*array = theNewCollection;
//...
}
Вызов этой функции должен быть выполнен как.
int* arr = malloc(sizeof(int)*10);
foo(&arr);