Ich lese "King KNs C-Programmierung" und habe die folgende Aussage gefunden:
Wir haben die Verwendung des Ausdrucks
sizeof(a)/sizeof(a[0])
zur Berechnung der Anzahl der Elemente in einem Array erörtert . Der Ausdrucksizeof(a)/sizeof(t)
, bei dem t der Typ der Elemente eines Elements ist, würde ebenfalls funktionieren, wird jedoch als minderwertige Technik angesehen.
Warum wird es als minderwertige Technik angesehen?
Antworten:
sizeof(a)/sizeof(t)
Codiert den Typ explizit in den Ausdruck. Sie haben jetzt den Typ an mehreren Stellen angegeben, ohne dass der Compiler unterstützt wird, um sicherzustellen, dass Sie denselben Typ verwenden. Wenn Sie also den Basistyp des Arrays ändern, aber nicht im (vollständig getrennten) Zählausdruck Bingo: Ihr Code wird einwandfrei kompiliert, aber Ihre Elementanzahl ist falsch. Wenn Sie Glück haben, stürzt Ihr Programm ab, aber wenn nicht, funktioniert es fast vollständig korrekt, aber hin und wieder verhält es sich völlig seltsam.sizeof(a)/sizeof(a[0])
ist garantiert korrekt und erfordert nur den Namen des Arrays. Ändern Sie den Typ und es geht Ihnen gut; Ändern Sie den Array-Namen und der Compiler wird sich beschweren. Kein Denken erforderlich: Wir mögen diese Art der Programmierung.quelle
sizeof a/sizeof*a
es wirklich , obwohl es nicht wirklich ein wesentlicher Unterschied ist.