Technisch gesehen vergleichen Sie Stringadressen. Ohne Optimierungen ist die erwartete Antwort "Nein" (zwei verschiedene Strings, also zwei Adressen).
Die meisten modernen Compiler führen jedoch String-Interning durch (Zusammenführen von identischen Konstantenstrings), in welchem Fall die Antwort "Ja" wäre. Beachten Sie, dass dies nur für Zeichenfolgenliterale geschieht.
Zum Beispiel GCC 4.9.2 tut dies, indem Standard:
#include <stdio.h>
int
main()
{
char *ptr1 = "abc";
char *ptr2 = "abc";
printf("%p\n%p\n",ptr1,ptr2);
if (ptr1 == ptr2) printf("yes\n");
}
gcc -o /tmp/file /tmp/file.c
/tmp/file
0x400660
0x400660
yes
Interessanterweise Verhalten unterscheidet (das heißt keine Internierung), wenn die Variablen deklarieren char ptr1[]
und char ptr2[]
. Dies liegt daran, dass der Compiler in diesem Fall die Zeichenfolgen tatsächlich auf dem Stapel platziert (siehe here).
Wie in den Kommentaren angegeben, ist der richtige Weg, Strings zu vergleichen, strcmp
und verwandte Funktionen.
Nein. Sie vergleichen Adressen. Deshalb existiert strcmp. – OldProgrammer
hängt wirklich ab, wenn der Compiler String Interning als Optimierung – isedev
Sie müssen herausfinden, was ein Zeiger ist. –