Ich habe mir die Frage Einfache Anführungszeichen vs. doppelte Anführungszeichen in C oder C++ angesehen. Ich konnte die gegebene Erklärung nicht ganz verstehen, also schrieb ich ein Programm:
#include <stdio.h>
int main()
{
char ch="a";
printf("sizeof(ch) :%d\n", sizeof(ch));
printf("sizeof(\'a\') :%d\n", sizeof('a'));
printf("sizeof(\"a\") :%d\n", sizeof("a"));
printf("sizeof(char) :%d\n", sizeof(char));
printf("sizeof(int) :%d\n", sizeof(int));
return 0;
}
Ich habe sie mit gcc und g++ kompiliert und das sind meine Ausgaben:
gcc:
sizeof(ch) : 1
sizeof('a') : 4
sizeof("a") : 2
sizeof(char) : 1
sizeof(int) : 4
g++:
sizeof(ch) : 1
sizeof('a') : 1
sizeof("a") : 2
sizeof(char) : 1
sizeof(int) : 4
Die Ausgabe von g++ macht für mich Sinn und daran habe ich keinen Zweifel. In gcc, was muss man haben sizeof('a')
anders sein als sizeof(char)
? Gibt es einen tatsächlichen Grund dafür oder ist es nur historisch?
Auch in C, wenn char
und 'a'
unterschiedliche Größe haben, bedeutet das, wenn wir schreiben
char ch="a";
führen wir eine implizite Typkonvertierung durch?
mögliches Duplikat von Zeichengröße (‘a’) in C/C++
– Bo Persson
15. Mai 2012 um 20:16 Uhr
Ich bin tatsächlich überrascht
sizeof("a") : 2
– all die Jahre, und ich bin immer davon ausgegangen, dass das dasselbe wäre wiesizeof(char*)
– Ich hätte es vielleicht tatsächlich benutzt, wenn ich es anders gewusst hätte.– Benutzer180247
22. Mai 2012 um 19:28 Uhr