Aloha :)
Ich würde das so aufschreiben:
#include <stdio.h>
void squareVec( double vec[], int n) {
while (n-->0) vec[n]*= vec[n];
}
void main() {
double vec[]= {-1.0,2.0,0.0};
squareVec( vec, 3 );
for (int j=0; j<3; ++j) printf("vec[%d]= %lf\n", j, vec[j]);
}
In deiner Lösung sind einige kleine Bugs:
int squareVec(double vec, int n) {
int j=0;
for(j=1, j<dim; --j) {
*vec[j] = &vec[j] * &vec[j];
}
return vec;
}
1) Du sagst, im Funktiosnkopf, dass die Funktion einen int-Wert liefert, gibst aber dann das übergebene Array "vec" zurück.
2) Du übergibst mit "double vec" nur einen einzigen double-Wert, nicht das Array "vec".
3) Du initalisierst "int j=0" mit Null, nur um in der nächsten Zeile "j=1" zu setzen. Das ist einerseits überflüssiger Code, andererseits ein fataler Fehler, weil Arrays in C immer mit dem Index 0 beginnen.
4) Mit "--j" zählst du die Schleifenvariable runter. Weil du mit j=0 anfängst, durchläuft j alle negativen Zahlen, sodass ein Segmentation-Fault sicher ist.
5) Die Adressierung "*vec[j]=&vec[j] * &vec[j]" ist völliger Unsinn. Du hast noch nicht verstanden, wie man Arrays an Funktionen übergibt und aufruft. Dazu empfehle ich dir folgendes kurzes Video
https://youtu.be/gNlmJ2WrZSY
main() {
double vec[3] = {-1.0,2.0,0.0};
int j=0;
squareVec(vec,3);
for(j=0; j<3; ++j) {
printf("vec[%d] = %f ",j,vec[j]);
}
printf("\n");
}
Die main()-Fukntion sieht schon besser aus, dazu noch einige Hinweise:
1) Die main()-Funktion hat keinen Rückgabewert, dann wird standardmäßig "int" als Rückgabewert eingesetzt. Die Funktion gibt aber keinen Wert zurück. Wenn du Glück hast, wirft der Compiler eine Warnung.
2) Seit C99 müssen Variablen nicht mehr am Anfang eines Blockes deklariert werden, daher kannst du die Zeile "int j=0" streichen und dafür die Deklaration in die Schleife reinnehmen: "for (int j=0; j<3; ++j)"
3) Seit C99 wird "float" nicht mehr automatisch in double konvertiert. Die Compiler können also in float rechnen. Daher sollte innerhalb "printf" der Formatspezifizierer "%lf" (long float) verwendet werden, wenn double-Werte ausgegeben werden sollen.