Warum gibt sizeof (char + char) 4 zurück?

8
%Vor%

Was schreibt printf auf den Bildschirm?

Ich dachte, weil sizeof (char) = 1 ist, dass sizeof (a + b) auch 1 ist, aber es hat sich als 4 herausgestellt. Ich verstehe das nicht, warum schreibt es 4 wenn wir zwei addieren Zeichen?

    
Nebeski 09.02.2016, 19:49
quelle

2 Antworten

12

In C-Sprache werden Operanden fast aller arithmetischen Operatoren impliziten Konvertierungen unterworfen, die üblichen arithmetischen Konvertierungen oder in diesem Fall Integer-Promotions genannt werden. Operanden vom Typ char werden zum Typ int hochgestuft und die tatsächliche Addition wird innerhalb der Domäne int (oder unsigned int , abhängig von den Eigenschaften von char auf dieser Plattform) ausgeführt. Ihr a + b wird also tatsächlich als (int) a + (int) b interpretiert. Das Ergebnis hat den Typ int und sizeof(int) ist anscheinend 4 auf Ihrer Plattform. Das ist 4 was du siehst.

Und verwenden Sie nicht %d bis printf das Ergebnis von sizeof . Das Ergebnis von sizeof hat den Typ size_t , während %d ein Argument int benötigt. Verwenden Sie also entweder den richtigen Formatbezeichner

%Vor%

oder zumindest das Argument, wenn Sie sicher sind, dass es passt

%Vor%     
AnT 09.02.2016, 19:52
quelle
6

Dies ist nicht dasselbe wie sizeof(char) , das Argument ( d. h. das Ergebnis der Addition ) wird auf int hochgestuft, sodass sizeof(a + b) tatsächlich sizeof(int) entspricht. Wenn Sie das Ergebnis in char umsetzen, wird es erwartet. Der korrekte Formatbezeichner für sizeof result ist size_t und %zu .

Versuchen Sie

%Vor%     
Iharob Al Asimi 09.02.2016 19:53
quelle

Tags und Links