Hallo Besucher, der Thread wurde 12k mal aufgerufen und enthält 82 Antworten

letzter Beitrag von MOS am

Das verstehe ich nicht in meinem C Lehrbuch

  • Zitat

    Ich bilde mir ein in meinem Lehrbuch gelesen zu haben &matrix wäre die Anfangsadresse der gesamten matrix.

    Richtig. Es ist aber nicht die Adresse, wo der etwaige Zeiger auf die Matrix gespeichert ist.


    Generell holt "&" nur die Adresse, wo der Inhalt einer Variable gespeichert ist. Bei Array-Namen ist das effektiv redundant und ändert eben nur den Typ in "Zeiger auf Array".


    Daher kannst Du auch nicht zwei verschiedene Variablen mit der Deklaration "T a,b;" - ohne Pointer! -jemals dazu bringen, daß sie auf den gleichen Speicherort zugreifen (so daß eine Änderung des Inhalts von a sich gleichzeitig auf b auswirkt). Dazu brauchst Du dann schon zwei Variablen mit der Deklaration "T *a, *b;", wonach Du dann beiden den gleichen Pointer zuweist, und dann haben *a und *b stets den gleichen Inhalt - das ist dann Aliasing.



    Jetzt sei mir mal die Frage gestattet: hast Du dir mittlerweile mal mein "mat_mult" genauer angeschaut und auch mal selbst kompiliert? Ich hab' das nicht nur als Spielzeug gebaut, "matrix.h" ist mittlerweile in vielen meiner Programme im Einsatz und eine der wenigen Sachen in C, welche ich für weitgehend kugelsicher halte. Wenn diese Header-Datei, ähnlich wie <stdarg.h> für variable Parameterlisten, damals schon in C89/C90 mit in den Standard aufgenommen worden wäre, würden wir uns heute nicht mit den halb-garen "conformant arrays" rumärgern müssen...

  • Mike: ich habe Dein Matrizenprogramm heruntergeladen aber noch nicht im Einzelnen angesehen.


    Vorher muß ich noch einige Knoten in meiner Denke auflösen.


    momentan sieht es bei mir folgendermaßen aus:


    Es sei int array[2][4]={{0,1,2,3},{4,5,6,7};


    array ist das gesamte {{0,1,2,3},{4,5,6,7}}.


    zugleich ist array ein Zeiger auf das erste Element von array sprich auf {0,1,2,3}


    array ist gleichbedeutend mit array[0] das ebenfalls auf das erste Element {0,1,2,3} deutet.


    *array ist das erste Element von array eben {0,1,2,3}


    zugleich deutet *array auf das erste Element von {0,1,2,3} eben auf 0.


    **array ist nun das erste Element von {0,1,2,3} eben 0.


    ich hoffe ihr könnt mir folgen.