Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Darf man das: return "Hallo"; ?

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
25.08.2005, 14:33 Uhr
~EinGast
Gast


Hallo!

Mal eine kurze frage:

Darf man das:

C++:
return "Hallo";

;

Oder anders gefragt.
Ist das eigentlich:


C++:
"Hallo";



ein


C++:
static const char* // static -> Also die ganze Programm Laufzeit gültig?



Danke!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.08.2005, 15:00 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von ~EinGast:
Hallo!

Mal eine kurze frage:

Darf man das:

C++:
return "Hallo";

;



Ja. Eine solche Funktion sollte als Return type const char* haben.


Zitat von ~EinGast:

Oder anders gefragt.
Ist das eigentlich:


C++:
"Hallo";



ein


C++:
static const char* // static -> Also die ganze Programm Laufzeit gültig?




Also erstmal ist die Bedeutung von static je nach Kontext sehr unterschiedlich

Dann ist es sehr unterschiedlich, ob du schreibst

C++:
char* x = "Hallo";


oder

C++:
char y[] = "Hallo";


Weil im ersten Fall (der auch dem oben genannten Return entspricht), der Datentyp von x eigentlich const char * wäre, obwohl der Compiler dazu nichts weiter sagt: x ist ein zeiger auf einen absolut constanten Speicherbereich. Ein Schreibender Zugriff, etwa x[1] = 'e'; wird vom Standard mit undefinierten Verhalten bestraft, in einem Konkreten Programm oft mit einem Absturz bebacht.
Im zweiten Fall ist y jedoch ein Array, kein Pointer und das Array is inhaltlich veränderbar,
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.08.2005, 15:41 Uhr
~EinGast
Gast


Danke erst mal!

Jetzt wo ich die Antwort lese kommt mir die Idee das Potential von c++ eventuell nicht ganz ausgeschöpft zu haben.

Ich erklär einfach mal mein vorhaben.

Ich habe meinem Benutzer die Möglichkeit gegeben Tasten Kombinationen zu benutzen.
Soweit Funtzt das auch.
Jetzt möchte ich die Kombis aber auch Anzeigen.
Also einen String erstellen wie z.B. den:
"ALT" + "STRG" + "TAB"
Das einzige was mir fehlt ist eine Funktion wie z.B.:

C++:
const char* GetKeyString(UINT KeyIndex)
{
static char Buffer[100];

// Buchstarben
if(KeyIndex >= KEY_A && KeyIndex <= KEY_Z)
{
    Buffer[0] = KeyIndex - KEY_A + 'A';
    Buffer[1] = NULL;
    return Buffer;
}

// Sonstiges
if(KeyIndex == KEY_TAB)
{
return "TAB"; // Diese Adresse ist also bei verlassen der Funktion noch gültig
}
}


Naja für A-Z , 0-9, F1 –F12
Kann ich das Errechen.

Aber für Tab, Esc, Pos1 u.s.w.
Ist das ja schon sehr aufwendig.

Gibt es da eine Bessere Lösung?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.08.2005, 20:53 Uhr
ao

(Operator)



Zitat von ~EinGast:
Gibt es da eine Bessere Lösung?

Eine String-Tabelle nach diesem Muster:

C++:
const char * pszKeyNames [] =
{
    "1"
    , "2"
    , "3"
    , "4"
    , "5"
    /* ...... */
    , "A"
    , "B"
    /* ...... */
    , "Strg"
    , "Shift"
    , "Alt"
    , /* ...... */
    , "F1"
    , "F2"
    /* ....... */
};


Musst nur drauf achten, dass du jeden String an die Stelle setzt, die der Nummer der Taste entspricht. Dann gehst du mit der Nummer als Index direkt in die Tabelle und holst dir den entsprechenden String ab.

Die Tabelle kann keine Lücken haben, d.h. wenn es irgendwelche Plätze gibt, die keiner Taste zugeordnet sind, muss die Tabelle trotzdem einen Eintrag dort haben, z.B. NULL.

Allgemein sind diese sog. Lookup-Tables meist nicht optimal im Speicherverbrauch, aber dafür sind sie rasend schnell in der Abarbeitung.

ao

Dieser Post wurde am 25.08.2005 um 20:54 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.08.2005, 21:56 Uhr
DarthDevilous




Zitat von ~EinGast:

C++:
// Sonstiges
if(KeyIndex == KEY_TAB)
{
return "TAB"; // Diese Adresse ist also bei verlassen der Funktion noch gültig
}
}


Naja für A-Z , 0-9, F1 –F12
Kann ich das Errechen.

Aber für Tab, Esc, Pos1 u.s.w.
Ist das ja schon sehr aufwendig.

Gibt es da eine Bessere Lösung?


anstatt für jede KEY_XXX ein if statement zu machen kannst du ja ein switch machen:

C++:
switch(KeyIndex)
{
case KEY_TAB: return "TAB";
case KEY_XXX: return "XXX";
    //usw.
}


Dieser Post wurde am 25.08.2005 um 21:57 Uhr von DarthDevilous editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.08.2005, 12:48 Uhr
~EinGast
Gast


Danke euch beiden.

Habe es gestern noch über Switch gemacht. Aber für die Zukunft weiss ich jetzt bescheid!

Danke noch mal!!!
 
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: