Zeiger und array "zugriff"



  • angenommen, ich definiere ein feld von x elementen, mittels zeiger
    also bsp int *b=malloc(sizeof(int)*100)
    (im übrigen brauch ich das sizeof da? oder wird die anzahl der objekte hier allokiert? ist ja auch beim rauf/runterzählen so)
    und wenn ich jetzt mit b[5] da drauf zugreife, ist das vom sprachstandard her valide? und wird dann das 4 int element genommen?
    und wenn ich jetzt einen zeiger als array mittels typedef als neuen typ starte,
    wie sieht das da mit dem zugriff aus?
    zb typedef struct cartesian* an_array[10];
    wenn ich
    a) jetzt im struct mehrere unterschiedliche elemente hab, ist doch die zugriffsstruktur mittels array-index voll im eimer? Soweit ich sehen kann, macht
    da der Arrayzugriff absolut keinen Sinn, seh ich das richtig?
    b) für struct cartesian jetzt platz von, sagen wir 10 byte von noeten wären, aber ich 200 byte allokier, und das trotzdem in 10 teile aufgeteilt ist, hat dann ein element 20 byte? die frage ist nur ne bestätigung für a), weil solche "strukturen" mit typedefs machen imho keinen sinn

    euer verwirrter menace



  • Also, das sizeof() brauchst du auf jeden Fall, da malloc() nicht wissen kann, wie groß ein Element ist. Es bekommt ja keinerlei Angaben zum Datentyp. Darum musst du bei dem einzigen Parameter, den malloc() hat, die genaue Byteanzahl angeben.
    Zugreifen kannst du natürlich mit den []. Da gibts keinerlei Probleme. Du musst hald wie immer die Grenzen deines Arrays beachten, sonst gibts Programmabstürze ;).

    Was du mit deinem typedef willst, versteh ich nicht ganz. Hast du den schonmal durch den Compiler gejagt? Ich bezweifle nämlich, dass der das schluckt (-> Fehlermeldung).



  • also wenn ich

    struct feld {
    void *elem[10];
    int zahl;
    };
    typedef struct feld* Array[2];
    

    compiliert sogar mit -w -Wall -ansi -g anstandslos
    gibt es irgendeinen Sinn, solch ein Typdef zu bauen?



  • Gute Frage. Also ich hatte noch kein Bedürfnis solch einen typedef zu machen. Was bezweckst du denn damit? Ich frag mich grad auch wie dann eine Deklaration einer Variablen aussehen sollte:

    Array[2] Variable; 😕

    Und wie sollte dann auf die Elemente zugegriffen werden??

    Also für mich gibt das keinen Sinn. 😞



  • AJ schrieb:

    Ich frag mich grad auch wie dann eine Deklaration einer Variablen aussehen sollte:

    Ich nehme an,
    Array Variable;

    Also für mich gibt das keinen Sinn. 😞

    Naja, manchmal macht man gerne

    typedef int matrix[10][10];
    void foo(matrix m)
    {
    }

    weil es so schön simpel ist.

    Aber in der Tat: oft macht es keinen Sinn.



  • @Shade
    Achso und m hätte dann zwei Dimensionen mit jeweils 10 Elementen, oder??


Anmelden zum Antworten