Zeiger in Array
-
Hallo, Leute. Kann mir jemand helfen?Ich bin gerade bei erlernen 'C'
und kann nicht mit meine Hausaufgaben klar kommen.Mein Problem - Zeiger(Pointer).
Einfach, ohne Zeiger, habe ich das schon gelöst, aber jetzt muss ich irgenwie
das alles mit Zeiger erledigen. Also, folgende:
Sind eine Array Matrix_A(4 Zeile,5 Spalte) mit int gefüllt. z.B.
{{1,2,3,4,5}
{2,3,4,5,6}
{3,4,5,6,7}
{4,5,6,7,8}}und noch ein Array Matrix_B (5 spalten) z.B.
{4,5,6,7,8}
Jetzt sollen wir bekommen Ergebnis( auch Array mit 4 Zeilen)
Ergebnis[k] = Matrix_A[a][k] * Matrix_B[a]
Füe Spalte und Zeile sind noch zweiVariable zulässig: 'a' für spalten und 'k' für zeilen.
Mit Schleife geht alles gut.
Ich werde hier nicht ganze QuelleCode schreiben, nur die wichtigste Zeile:for(k=0; k < 4; k = k + 1) for(a=0; a < 5; a = a + 1) ges_pkte [k] = ges_pkte[k] + Matrix_A [k][a] * Matrix_B[a]; ________________________
und Ausgabe:
for(a = 0; a <= 4; a = a + 1) k = 0; bla bla bla... printf("\t%d",ges_pkte[k]) ;
Alles funktioniert wunderbar, aber jetzt soll ich das alles mit Zeigern versehen.
So mache ich das:int *z_matrix_a = &Matrix_A[4][5]; int *z_matrix_b = &Matrix_B[5]; int *z_ges_pkte = &ges_pkte[4]; z_ges_pkte = &ges_pkte[0]; z_matrix_a = &Matrix_A[0][0]; z_matrix_b = &Matrix_B[0]; for(k=0; k < 4; k = k + 1) for(a=0; a < 5; a = a + 1) *z_ges_pkte = *z_ges_pkte + *(z_matrix_a++) * *(z_matrix_b++); _______________________ for(a = 0; a <= 4; a = a + 1) k = 0; bla bla bla... printf("\t%d",*z_ges_pkte) ;
Keine Fehler beim Compilieren und blöde Ergebnis. Ich weiss, dass ich
etwas falsch mache, aber allein ich komme nicht zu recht.
Ich danke voraus für ihre Hilfe.
-
Logikfehler in der Implementierung:
Du läufst durch die Schleife und bei jedem Duchlauf setzt du mit dem Operator ++ beide Zeiger hoch für das zweidimesionale Array z_matrix_a mag das sogar stimmen aber wenn du z_matrix_b für k=1 benutzt bist du jenseits des zulässigen Bereichs.
Probiers mal damit.
Ein paar Klammern mehr machen alles übersichtlicherfor(i=0; i < 4; i++)
for(k=0; k < 5; k++)
*z_ges_pkte = (*z_ges_pkte) + ((z_matrix_a + (i*5+k)) * ((z_matrix_b + k));- Matrix_B ist von der üblichen Benennung eigentlich eine Vektor
- In der Mathe ist es IMHO besser die Dereferenzierung von den MatheOperatoren zu trennen eine rein optische Angelegenheit
- die Änderung von (a nach k) und (k nach i) dient der Schönheit und der Gewohnheit der Leute die öfters damit arbeiten
- deine Schreibweise k=k+1 ist korrekt (k+=1 wäre auch zulässig), k++ ist die normalerweise benutzte.Hoffe geholfen zu haben