Frage zu Quellcode
-
Hi Leute,
ich hab mich gefragt ob folgender code legal ist?float *p; if(true){ float arr[9]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9}; p = &arr[0]; } for (int i = 0; i < 9; i++) { printf("%f\n",*(p+i)); }
ich bekomme als Ausgabe:
1.100000 2.200000 3.300000 4.400000 5.500000 6.600000 7.700000 8.800000 9.900000
also eigentlich das Richtige, doch irgendwie hab ich das gefühl das das nur zufall ist weil ich sonst keine Variablen mehr definiere.
Ich würde mich über eine Erklärung freuen
Was mir ebenfalls unklar ist warum es
*(p+i)
heißt und nicht*(p+i*sizeof(float))
LG XBert
-
Ist legal unter
#include <stdbool.h>
.XBert schrieb:
irgendwie hab ich das gefühl das das nur zufall ist weil ich sonst keine Variablen mehr definiere.
Quotation for the day: "a counter that doesn't exist can't get messed up."
Du brauchst nicht malp
, kannstarr
stattdessen nehmen.XBert schrieb:
Was mir ebenfalls unklar ist warum es "(p+i)" heißt und nicht "(p+i*sizeof(float))"
Weil C sich im Hintergrund darum kümmert, das bei
p + 1
nicht um ein Byte hochgezählt wird, sondern um soviele, wie der Typ gross ist, auf den p zeigen kann.
-
µngbd schrieb:
Du brauchst nicht mal
p
, kannstarr
stattdessen nehmen.Das glaube ich nicht, da
arr
nur innerhalb der if-schleife gültig istAber gaut zu wissen, dass das andere gültig ist
-
Das glaube ich nicht, da arr nur innerhalb der if-schleife gültig ist
Argh, hast recht. Das geht so nicht.
arr
ist nach dem Block längst tot, dort kann irgendetwas stehen. Man müsste esstatic
machen.
-
Hi,
XBert schrieb:
was mir ebenfalls unklar ist warum es
*(p+i)
heißt und nicht*(p+i*sizeof(float))
LG XBert
Der Compiler weiß, das er i*sizeof(float) rechnen muss. Genau so wie er weiß, das er bei p++ sizeof(float) bytes draufaddiert.
Gruß,
B.B.