Wie groß ist das Zeichen in C und C ++? Soweit ich weiß, beträgt die Größe von char sowohl in C als auch in C ++ 1 Byte.
#include <stdio.h>
int main()
{
printf("Size of char : %d\n", sizeof(char));
return 0;
}
#include <iostream>
int main()
{
std::cout << "Size of char : " << sizeof(char) << "\n";
return 0;
}
Keine Überraschungen, beide geben die Ausgabe: Size of char : 1
Jetzt wissen wir , dass Zeichen dargestellt werden als 'a'
, 'b'
, 'c'
, '|'
, ... Also ich nur die oben genannten Codes auf diese geändert:
In C:
#include <stdio.h>
int main()
{
char a = 'a';
printf("Size of char : %d\n", sizeof(a));
printf("Size of char : %d\n", sizeof('a'));
return 0;
}
Size of char : 1
Size of char : 4
In C ++:
#include <iostream>
int main()
{
char a = 'a';
std::cout << "Size of char : " << sizeof(a) << "\n";
std::cout << "Size of char : " << sizeof('a') << "\n";
return 0;
}
Size of char : 1
Size of char : 1
Warum gibt das sizeof('a')
in C und C ++ unterschiedliche Werte zurück?
"%|"
Format erfordert einint
Argument (oder etwas, das dazu wirbtint
).sizeof
ergibt ein Ergebnis vom Typsize_t
. Konvertieren Sie entweder inint
eine Besetzung oder verwenden Sie, wenn Ihre Implementierung dies unterstützt"%zu"
.Antworten:
In C ist die Art eines Zeichenkonstante wie
'a'
tatsächlich einint
, mit einer Größe von 4 (oder einem anderen implementierungsabhängigen Wert). In C ++ ist der Typchar
mit der Größe 1. Dies ist einer von vielen kleinen Unterschieden zwischen den beiden Sprachen.quelle
int
zuchar
, die das Verhalten erklärt. :)Wie Paul sagte, liegt es daran, dass
'a'
es einint
in C, aber einchar
in C ++ ist.Ich beschreibe diesen spezifischen Unterschied zwischen C und C ++ in etwas, das ich vor einigen Jahren geschrieben habe: http://david.tribble.com/text/cdiffs.htm
quelle
In C sind die Zeichenliterale in C ++ int und char . Dies ist in C ++ erforderlich, um das Überladen von Funktionen zu unterstützen . Siehe dieses Beispiel:
Ausgabe:
quelle
In der Sprache C ist das Zeichenliteral kein
char
Typ. C betrachtet das Zeichenliteral als Ganzzahl. Es gibt also keinen Unterschied zwischensizeof('a')
undsizeof(1)
.Die Größe des Zeichenliteral ist also gleich der Größe der Ganzzahl in C.
In der C ++ - Sprache ist das Zeichenliteral der Typ
char
. Die Referenz sagt:In C ++ ist das Zeichenliteral also eine Art von
char
. Die Größe des Zeichenliteral in C ++ beträgt also ein Byte.Außerdem haben Sie in Ihren Programmen einen falschen Formatbezeichner für den
sizeof
Operator verwendet.C11 §7.21.6.1 (P9):
Sie sollten also
%zu
stattdessen den Formatbezeichner verwenden%d
, da es sich sonst um ein undefiniertes Verhalten in C handelt.quelle
%zu
wird auf vielen Plattformen nicht unterstützt, bietet aber eine bessere Portabilität, Verwendung(int)sizeof(char)
und Formatierung%d
char
Typ standardmäßig signiert oder nicht signiert ist.