Wie finden Sie die Größe einer variable mit out Verwendung von sizeof
Nehmen wir an, ich habe erklärt die variable 'i' bestimmter Datentyp (int, char, float oder double) ...
HINWEIS: man bedenke nur, daß 'ich' deklariert ist und nicht stört, wenn es ein int oder char oder float-oder double-Datentyp. Da möchte ich eine generische Lösung, ich bin einfach zu erwähnen, dass die variable 'ich' werden kann, ohne das eine der Datentyp, nämlich int, char, float oder double.
Nun finde ich die Größe der variable 'i' ohne sizeof-operator?
warum wollen Sie nicht die Verwendung von sizeof() ?
Gefunden eine ähnliche Frage. stackoverflow.com/questions/1219199/...
Eine ähnliche Frage ist hier, durch die Art und Weise: stackoverflow.com/questions/1219199/...
Meh, ninja würde...
Das klingt wie eine interview-Frage.....
Gefunden eine ähnliche Frage. stackoverflow.com/questions/1219199/...
Eine ähnliche Frage ist hier, durch die Art und Weise: stackoverflow.com/questions/1219199/...
Meh, ninja würde...
Das klingt wie eine interview-Frage.....
InformationsquelleAutor codingfreak | 2009-09-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie den folgenden makro verwenden, entnommen hier:
Die Idee ist die Verwendung von Zeiger-Arithmetik (
(&(var)+1)
), um zu bestimmen, den offset der variable, und subtrahieren Sie dann die original Adresse der Variablen, was zu seiner Größe. Zum Beispiel, wenn Sie eineint16_t i
- variable an0x0002
Sie wäre Subtraktion0x0002
aus0x0006
, und damit den Erhalt0x4
oder 4 bytes.Allerdings sehe ich nicht wirklich einen triftigen Grund nicht zu verwenden
sizeof
, aber ich bin sicher, Sie müssen haben eine.Ich denke, diese Logik wäre hilfreich finde ich die Größe von einem Datentyp aber wie wäre es mit einer variable mit unbekannter Datentyp
Was meinst du mit unbekannt, wie würden Sie es erklären ? Wenn Sie eine variable wie, sagen wir,
int i
,sizeof_var(i)
geben Sie Ihre Größe.Lassen Sie uns nehmen Sie an, Sie haben einfach vergessen, für welchen Datentyp Sie haben, deklariert die variable 'ich'. Was ich damit sagen will ist, unabhängig von der Datentyp, zu dem Sie erklärt wurde, sollten wir noch finden können, die Größe der Variablen 'i'
Dies kann zu undefinierten Verhalten, wenn die Adresse nicht representible in
size_t
(z.B. segmentierte Architektur), und es ist auch nicht gewährleistet, dass Sie zurück in der richtigen GrößeInformationsquelleAutor João Silva
Es ist schon lange her, seit ich schrieb beliebigen C-code, und ich war nie gut darin, aber das sieht richtig:
Ich bin mir sicher, dass mir jemand sagen kann viele Gründe, warum dies falsch ist, aber es gibt einen sinnvollen Wert für mich.
void *
zuchar *
- Sie sind eigentlich nicht zu tun, Zeiger-Arithmetik mitvoid *
.Habe ich geprüft, es ist OK mit Polsterung sizeof macht das gleiche und umfasst die Polsterung in der Größe der var. Daher ist es woks genau das gleiche.
Mit (char*) statt (void*) würde verhindern, dass der compiler Warnungen über void* arithmetische und hat das gleiche Ergebnis, da ein char immer die Größe 1.
Dies funktioniert auf den Prozessoren, die byte-adressierbaren Speicher. Ich bin mir nicht sicher, ob das funktionieren würde auf die DSP56300-Prozessoren der Serie, wo die char und int sind beide gespeichert in einzelne 24-bit Breite Speicheradressen. Der Prozessor muss nicht byte-Adressierung, so dass der Unterschied zwischen der Zeiger Werte für aufeinander folgende chars oder ints werden beide 1.
irrelevant.
sizeof
ist definiert in Bezug aufchar
Einheiten, so dass das Ergebnis richtig sein wird. Wenn Ihre Implementierung verwendet 24 bit chars aber künstlich beschränkt Sie auf 8-bit-Palette, dann ist es nicht C. C-Mandate, diechar
keinen padding-bits.InformationsquelleAutor Joachim Sauer
Das funktioniert..
p2 - p1
sollte(int)(p2 - p1)
entsprechend der Formatbezeichner%d
Und Sie brauchen, wirft der Zeiger Konvertierungen:
p1 = (char *)&a;
InformationsquelleAutor Achu
Erklärung wäre nett.
Während dieser code kann die Frage beantworten, die zusätzliche Bereitstellung von Kontext in Bezug auf wie und/oder warum es löst das problem verbessern würde, die Antwort, die langfristigen Wert.
InformationsquelleAutor ra1
Versuchen, diese,
Für die folgenden user-defined datatype,
InformationsquelleAutor josh
Dies sollte Ihnen die Größe der variable
InformationsquelleAutor Karthick S
Programm zu finden, die Größe der Variablen ohne Verwendung
sizeof
BetreiberInformationsquelleAutor debaonline4u
InformationsquelleAutor Nitesh Pratap Singh
Unter Anweisung geben wird generische Lösung:
i
ist ein Variablen-Namen, das kann jeder Datentyp (char, short, int, float, double, struct).void *
Zeiger. Dies ist (in der Regel), ein GNU-C Erweiterung.InformationsquelleAutor vikram p