Heim >Backend-Entwicklung >C++ >Was ist der Unterschied zwischen „sizeof' einem String-Literal, einem „const char* const' und einem „const char[]'?
Sizeof String Literal: Die Unterschiede aufdecken
Betrachten Sie den folgenden Codeausschnitt:
#include <iostream> using namespace std; int main() { const char* const foo = "f"; const char bar[] = "b"; cout << "sizeof(string literal) = " << sizeof("f") << endl; cout << "sizeof(const char* const) = " << sizeof(foo) << endl; cout << "sizeof(const char[]) = " << sizeof(bar) << endl; }
Die Ausführung dieses Codes zeigt faszinierend Ergebnisse:
sizeof(string literal) = 2 sizeof(const char* const) = 4 sizeof(const char[]) = 2
Verstehen der Ergebnisse
Interpretation des String-Literal-Typs
Während sizeof den benötigten Platz berechnet Für das Zeichenfolgenliteral wird der zugrunde liegende Typ nicht geändert. Das String-Literal hat weiterhin den Typ „Array der Größe N von const char“, wobei N für das abschließende Nullzeichen steht.
Array vs. Zeigerverhalten
Es ist wichtig zu beachten, dass Arrays nicht in Zeiger zerfallen, wenn sie an sizeof übergeben werden. Dies bedeutet, dass sizeof(bar) die Größe des Arrays selbst zurückgibt, nicht die Größe eines Zeigers auf das Array.
Fazit
Zusammenfassend lässt sich sagen, dass sizeof(" f") gibt den für das String-Literal erforderlichen Platz zurück, einschließlich des Nullzeichens. Aufgrund der Typunterschiede verhalten sich sizeof(foo) und sizeof(bar) jedoch unterschiedlich. Das Verständnis dieser Nuancen ist wichtig, wenn Sie in der C-Programmierung mit String-Literalen arbeiten.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „sizeof' einem String-Literal, einem „const char* const' und einem „const char[]'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!