Erklärung einer Ausgabe
-
#include <iostream> using namespace std; struct test { int a,b,c; } NM; int main() { char* klasse = "C"; NM.a = NM.b = 255; NM.c = 7; if (klasse == "C" && NM.a, NM.b, NM.c == 255) cout << "ausgabe1"; else { if (klasse == "B" && NM.a, NM.b == 255) cout << "ausgabe2"; else { if (klasse == "A" && NM.a == 255) cout << "ausgabe3"; else cout << "ausgabe4"; } } return 0; }
Bei diesem Code wird "ausgabe2" ausgegeben, was mir nicht ganz einleuchtet.
Nur aus einem Interesse:
Kann mir jemand detailliert erklären, warum "ausgabe2" ausgegeben wird?
Das Erste, was mir nicht ganz klar ist:
Reserviert der Compiler für jede Stringkonstante nur einen Speicherbereich?
Denn char*str = "C";
if(str=="C") ist wahr und hier werden ja Adressen verglichen.
Deshalb dürfte er ja eigentlich NICHT "ausgabe2" ausgeben, da klasse nicht "B" ist.Bin für jeden Tipp dankbar:)
-
Bei den if-Bedingungen werden jeweil die Bedingung vor dem ',' nicht beachtet;
die letzte Bedingung bsp: nm.C == 255 wird beachtet
-
Bei den if-Bedingungen werden jeweil die Bedingung vor dem ',' nicht beachtet;
die letzte Bedingung bsp: nm.C == 255 wird beachtetJa, das dachte ich mir auch und genau deshalb versteh ich ja die Ausgabe nicht.
Die 1. Bedingung ist falsch, da NM.C != 255
Die 2. Bedingung ist aber auch falsch, da klasse != "B" ist und dennoch ist diese Bedingung erfüllt. Wieso?
-
Darum:
gh0st124 schrieb:
Bei den if-Bedingungen werden jeweil die Bedingung vor dem ',' nicht beachtet;