Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Speicherverwaltung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.12.2006, 15:52 Uhr
alex309



Huhu,

habe hier ein kleines Verständnissproblem.....


C++:
int main()
{
   const unsigned long SIZE = 100;
   Stack stack(SIZE);
   char str[SIZE];
   unsigned int x;
  
   cout<< "Bitte einen String eingeben" <<endl;
   cin.get(str, SIZE);
  
   for(int x = 0; x < strlen(str); x++)  
   {
     stack.Push1(str[x]);  //hier wird ein Char übergeben
   }


//Push-Methode  --------------------------------------------------
bool Stack::Push1(int w)   //und hier ein int entgegen genommen
{
   if(anz < maxanz)
   {
     data[anz++] = w;      
   }      
   else
   {
     return (false);    
   }  
}
//-----------------------------------------------------------------


ist aus einem buch und funktioniert auch...nur verstehe ich nicht, dass das funktioniert, da ich ja einen char übergebe obwohl ein int erwartet wird.
ps: wie mache ich die schrift hier fett?

Dieser Post wurde am 19.12.2006 um 15:53 Uhr von alex309 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.12.2006, 15:54 Uhr
0xdeadbeef
Gott
(Operator)


Der char wird implizit in einen int umgewandelt, und nimmt dabei seinen numerischen Gegenwert an. Bzw behält ihn, aber wird jetzt als solcher interpretiert. Auf den meisten gängigen Plattformen ist das der ASCII-Wert, d.h. 'A' wird zu 65 etc. Das ist das selbe wie

C++:
char c = 'A';
int x = c; // implizite Umwandlung, x == 65


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 19.12.2006 um 15:55 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.12.2006, 16:07 Uhr
alex309



ok,

da der stack nur int-werte verwaltet muss ich dann wieder in einen char-wert umwandeln.

wie ist denn die korrekte schreibweise einer umwandlung.

C++:
(char)stack.Pop1(); oder (char)(stack.Pop1());

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.12.2006, 16:11 Uhr
0xdeadbeef
Gott
(Operator)


Hmm. Das geht zwar, aber C-style-casts sind in C++ eigentlich äußerst unschön, weil sie einen const_cast beinhalten - und das will man in aller Regel vermeiden. Besser wäre

C++:
char c = char(stack.Popl());


oder

C++:
char c = static_cast<char>(stack.Popl());


Ich bevorzuge die erste Schreibweise. Einen Unterschied macht das in diesem Fall nicht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 19.12.2006 um 16:13 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: