In C gibt es nur call by value, demzufolge kein call by reference.
Wie schon beschrieben nutze den subscript-Operator zum Zugriff auf das Array (welches als Funktionsargument immer in einen Zeiger zerfällt und der ist natürlich selbst auch call by value).
double array[16];
...
int funktion(double xy[]){
xy[0] =
...
xy[15] =
return 0;
}
call by value heißt also, dass du innerhalb einer Funktion immer auf einer Kopie des Arguments operierst, d.h. ein direkter ändernder Zugriff niemals vom aufrufenden Kontext bemerkt werden kann.
int funktion(double xy[]){
double a[16] = {4,5,6};
xy = a;
return 0;
}
int main()
{
double array[16] = {1,2,3};
funktion(array);
printf("%f\n%f\n%f\n",array[0],array[1],array[2]);
return 0;
}
https://ideone.com/Oj57sy
Wenn wenn du indirekt auf einen (nicht kopierten!) Speicherbereich zugreifst, der (z.B. durch einen Zeiger (der selbst nur eine Kopie ist)) im Argument angegeben wurde, hast du die Möglichkeit, diesen Speicherbereich zu ändern (z.B. mit subscript [])
int funktion(double xy[]){
double a[16] = {4,5,6};
xy[0] = a[0]; xy[1] = a[1]; xy[2] = a[2];
return 0;
}
int main()
{
double array[16] = {1,2,3};
funktion(array);
printf("%f\n%f\n%f\n",array[0],array[1],array[2]);
return 0;
}
https://ideone.com/tDs6Op