Sie können Zeiger mit den Gleichheitsoperatoren (==
oder !=
) vergleichen, die auf verschiedene Objekte oder Elemente verschiedener Arrays zeigen. Wenn die Zeiger nicht auf dasselbe Objekt zeigen, werden sie als ungleich betrachtet.
Genauer gesagt (die C-Standard, 6.5.9 Gleichheitsoperatoren)
6 Zwei Zeiger vergleichen gleich, wenn und nur wenn beide Null-Zeiger sind, beide sind Zeiger auf das gleiche Objekt (einschließlich eines Zeigers auf Ein Objekt und ein Unterobjekt an seinem Anfang) oder Funktion, sind beide Zeiger auf eine nach dem letzten Element des gleichen Array-Objekt oder einer ist ein Zeiger auf eins hinter dem Ende eines Array-Objekts und der andere ist ein Zeiger auf den Anfang eines anderen Array-Objekts, das mit passiert, folgen Sie sofort dem ersten Array-Objekt in t er Adressraum.
Betrachten Sie das folgende Beispiel.
#include <stdio.h>
int main(void)
{
struct A
{
int x;
int y;
} a;
printf("&a.x + 1 == &a.y is %d\n", &a.x + 1 == &a.y);
return 0;
}
Wenn es keine Polsterung zwischen den Datenelementen x
und y
der Struktur ist dann die Ausgabe gleich 1
sein wird, weil jedes Datenelement kann als ein Array mit einem Element und dem „Array“ y
sofort betrachtet werden folgt dem "Array" x
.
jedoch nicht Zeiger mit den relationalen Operatoren vergleichen kann (<
, >
, <=
, >=
), die Elemente aus dem gleichen Array oder über das Ende des gleichen Array zeigen nicht.
Was ist die Fehlermeldung? Welcher Compiler? –
Es gibt eine streunende '\' 'am Ende von' char name1 [20], name2 [20]; \ " – Gerhardh
..Ich dachte, das war ein Staubkorn auf dem Display :( –