Laenge eines Struct-Arrays.
-
@pcovc sagte in Laenge eines Struct-Arrays.:
Der dargestellte Code ist nicht von mir sondern von meinen Übungsleitern.
Das ändert nichts daran daß da kein Array ist. Merke dir die Größe oder nimm ein Array.
-
@Swordfish sagte in Laenge eines Struct-Arrays.:
Das ändert nichts daran daß da kein Array ist. Merke dir die Größe oder nimm ein Array.
alles klar dankeschön!
-
Dieser Beitrag wurde gelöscht!
-
@pcovc sagte in Laenge eines Struct-Arrays.:
sizeof(testArray)/sizeof(myCoordinate*)
Du hast hier
testArray
, ein Pointer to Pointer to myCoordinate
und
myCoordinate*
, ein Pointer to myCoordinate.Da Pointer auf gängigen Architekturen alle gleich groß sind dividierst Du irgendeine Konstante N (die Größe eines Pointer) durch N (die Größe eines Pointer) und erhältst 1.
-
ah super! jetzt habe ich das verstanden danke!
-
@titan99_ sagte in Laenge eines Struct-Arrays.:
Ist ein Array immer im Stack?
Davon abgesehen daß es den Begriff im Standard nicht gibt, ja.
-
@Swordfish sagte in Laenge eines Struct-Arrays.:
@titan99_ sagte in Laenge eines Struct-Arrays.:
Ist ein Array immer im Stack?
Davon abgesehen daß es den Begriff im Standard nicht gibt, ja.
Nein, es liegt nicht immer auf dem Stack. Im allgemeinen Fall ist nicht einmal erzwungen, dass das Array als solches überhaupt im Speicher existiert - es kann auch komplett in Prozessorregistern liegen.
Beispiel:
int main(void) { int arr[] = {0, 1}; return arr[1]; }
Das kompiliert (mit Optimierungen an) zu:
mov eax, 1 ret
Kein Array auf irgendeinem Stack, aber
arr
ist trotzdem ein Array.
-
@wob sagte in Laenge eines Struct-Arrays.:
es kann auch komplett in Prozessorregistern liegen
Den Begriff kennt der Standard noch viel weniger.
-
@Swordfish sagte in Laenge eines Struct-Arrays.:
@wob sagte in Laenge eines Struct-Arrays.:
es kann auch komplett in Prozessorregistern liegen
Den Begriff kennt der Standard noch viel weniger.
Er hat ein Keyword dafür?
-
@SeppJ Okok, bedeutet aber nichts anderes als "Machs schnell und gib mir nie-nicht die Adresse, wie ist mir wurscht.".
-
@SeppJ sagte in Laenge eines Struct-Arrays.:
@Swordfish sagte in Laenge eines Struct-Arrays.:
@wob sagte in Laenge eines Struct-Arrays.:
es kann auch komplett in Prozessorregistern liegen
Den Begriff kennt der Standard noch viel weniger.
Er hat ein Keyword dafür?
-
@manni66 C-Forum...
Außerdem heißt das trotzdem, dass der Standard Register kennt.
@Swordfish sagte in Laenge eines Struct-Arrays.:
@SeppJ Okok, bedeutet aber nichts anderes als "Machs schnell und gib mir nie-nicht die Adresse, wie ist mir wurscht.".
Es heißt buchstäblich "Register", verhält sich wie ein Register, und ist gedacht für Register. Was willst du mehr?
-
@SeppJ sagte in Laenge eines Struct-Arrays.:
und ist gedacht für Register.
... und ist implementation-defined.
@SeppJ sagte in Laenge eines Struct-Arrays.:
Was willst du mehr?
Ich will garnichts. Ich hätte wohl besser schreiben sollen
"Einen Array-Typ im free-store zu haben geht schlecht."
-
@Swordfish sagte in Laenge eines Struct-Arrays.:
"Einen Array-Typ im free-store zu haben geht schlecht."
int (*foo)[123];
Tadaa!
*foo
hat Typint[123]
und es kann jede beliebige Speicherklasse haben.
-
@SeppJ autsch
-
Ich hätt da noch an was anderes gedacht...
struct foo { int x; int data[123]; }; foo * f = new foo();
Wäre das dann nicht auch ein Array im free store im Sinn der Frage?
-
@Mechanics ja, gibs mir
-
@manni66 sagte in Laenge eines Struct-Arrays.:
The keyword is unused and reserved.
(since C++17)Welchen C-Programmierer sollte das interessieren?
-
int (*foo)[123];
Tadaa!
*foo
hat Typint[123]
und es kann jede beliebige Speicherklasse haben.Hier wird foo definiert und nicht *foo. Hier wird nirgendwo ein Array definiert, d.h. hier kann auch keine Speicherklasse für ein Array vorgegeben werden.
Worauf foo zeigt, ist für eine explizit vorgegebene Speicherklasse irrelevant; nur für foo selbst kann mittels Spezifizierer eine Speicherklasse vorgegeben werden, und im Filescope (oft gleichgesetzt mit dem nicht standardkonformen "global") kann foo z.B. auch nie register werden.
-
@Wutz sagte in Laenge eines Struct-Arrays.:
int (*foo)[123];
Tadaa!
*foo
hat Typint[123]
und es kann jede beliebige Speicherklasse haben.Hier wird foo definiert und nicht *foo. Hier wird nirgendwo ein Array definiert, d.h. hier kann auch keine Speicherklasse für ein Array vorgegeben werden.
Worauf foo zeigt, ist für eine explizit vorgegebene Speicherklasse irrelevant; nur für foo selbst kann mittels Spezifizierer eine Speicherklasse vorgegeben werden, und im Filescope (oft gleichgesetzt mit dem nicht standardkonformen "global") kann foo z.B. auch nie register werden.Ja? Genau das ist der Punkt.