Heute habe ich in "C Traps and Pitfalls" über""und''die Beschreibung gelesen,''Ein in einfache Anführungszeichen gesetztes Zeichen repräsentiert eine Ganzzahl, und der Ganzzahlwert entspricht dem Sequenzwert dieses Zeichens im vom Compiler verwendeten Zeichensatz.
""Eine Zeichenkette in doppelten Anführungszeichen repräsentiert einen Zeiger auf das erste Zeichen eines namenlosen Arrays. Ich wurde an diesen beiden Symbolen interessiert, also öffnete ich VS2010, um die Speicherformen von Zeichen in einfachen und doppelten Anführungszeichen im Speicher anzusehen.
Die experimentelle Methode ist sehr einfach: Betrachten Sie separat"yes"/'yes'/'ye'/'y'die Speicherformen von vier Arten von Zeichen im Speicher, der Code lautet wie folgt:int _tmain(int argc, _TCHAR* argv[])
{
char test1[] = "yes";
int test2 = 'yes';
printf("%x\n", &test2);
int test3 = 'ye';
printf("%x\n", &test3);
int test4 = 'y';
printf("%x\n", &test4);
return 0;
}
Die experimentellen Ergebnisse sind wie folgt:

Anhand der Speicherformen im Speicher wurde festgestellt, dass''das in einfache Anführungszeichen gesetzte Zeichen in der Speicherform einer Ganzzahl das erste Zeichen als höchstwertiges Byte und das letzte Zeichen als niederwertigstes Byte behandelt und sie in dieser Reihenfolge in den 4-Byte-Speicherplatz einer int-Variablen speichert;
""Die Zeichenkette in doppelten Anführungszeichen speichert das erste Zeichen an der Startadresse und das letzte Zeichen an der Endadresse.
Die experimentellen Ergebnisse bestätigten die Beschreibung in "C Traps and Pitfalls". Was würde dann passieren, wenn''das in einfache Anführungszeichen gesetzte Zeichen44 Byte überschreitet? Ein weiteres Experiment wurde durchgeführt, und der Code lautet wie folgt:
int _tmain(int argc, _TCHAR* argv[])
{
char test1[] = "yes";
int test2 = 'yes';
printf("%x\n", &test2);
int test3 = 'ye';
printf("%x\n", &test3);
int test4 = 'y';
printf("%x\n", &test4);
int test5 = 'yesa';
printf("%x\n", &test5);
return 0;
}
Die experimentellen Ergebnisse sind wie folgt:

Aus den experimentellen Ergebnissen ist ersichtlich, dass, wenn das Zeichen 4 Bytes überschreitet, die Speicherkapazität des int-Typs überschritten wird und der Compiler einen Fehler meldet, der anzeigt, dass die Konstante zu viele Zeichen enthält. Dies kann Programmierfreunde wirksam daran erinnern, dass möglicherweise Symbol-Eingabefehler vorliegen. Wenn jedoch die Speicherkapazität von int nicht überschritten wird, wird es ohne jede Warnung so akzeptiert, wie es ist, was eine verborgene Gefahr des Symbolmissbrauchs darstellt, und das Debuggen wird ziemlich mühsam sein, wenn später Probleme im Programm auftreten.
Original-URL: https://blog.csdn.net/u013541620/article/details/43172891