On Sun, Feb 25, 2001 at 07:06:45PM +0100, Tilo Wetzel wrote:
Guten Abend Leute,
ich hab da mal ne Frage zu C++.
[...]
void ausgabe_fehler(char text) { printf("was auch immer\n"); printf("was auch immer %c\n", text); }
definition char txt;
aufruf: txt="inhalt"; ausgabe(txt);
auch:
definition char txt[10]; aufruf: txt="inhalt"; ausgabe(txt);
funktioniert leider nicht.
Wie schon Thomas Dubiel gesagt hat, du mußt char* verwenden. Kleine Hintergrund-Information dazu:
Wenn du einen Array definierst, z.B. mit
char my_array[100];
kannst du auf die einzelnen Elemente zugreifen mittels
my_array[0]; my_array[1];
etc. Gleichzeitig hat man aber auch automatisch mit "my_array" einen Zeiger auf das erste Element des Arrays. Man kann also statt
my_array[0]='a'; my_array[1]='b';
z.B. schreiben
*my_array = 'a'; *(my_array+1) = 'b';
(Das Sternchen dient zum Dereferenzieren). Aus diesem Grund übergibt man in der Regel den Zeiger.
Oder: wie kann ich variablen und constanten so definieren, das ich aus jeder procedure / functions darauf zugreifen kann ?
(Bitte erst zu Ende lesen, deine Frage beantworte ich zum Schluß)
Grundsätzlich kannst du Variablen überall deklarieren. Sie sind dann inerhalb des Blocks, in dem sie deklariert werden, gültig. Z.B. ergibt
{ int a=1; printf("%d\n", a); { int a=2; printf("%d\n", a); } printf("%d\n", a); }
als Ausgabe
1 2 1
Wenn du also eine globale Variable deklarieren willst, deklarierst du sie also einfach außerhalb eines Blocks. Wird sie dann überschattet, läuft das folgendermaßen ab:
------------------------------------------------------- #include <stdio.h>
int a = 5;
void main () { int a = 1; printf ("%d\n", a); //ergibt '1' als Ausgabe printf ("%d\n", ::a); //ergibt '5' als Ausgabe } -----------------------------------------------------
Alles klar?
Was ich auch ganz toll vermisse, ist die definiton string (zeichenkette). Ist in C irgendwie mieß gemacht.
Das hängt jetzt dvon ab, ob du C oder C++ benutzt. In C gibt es nur char-Pointer. In C++ gibt es sehr wohl eine String-Klasse, die sich glaub ich sogar eleganter handhaben läßt als die von Pascal (ich hab seit zwei Jahren nicht mehr Pascal programmiert, deswegen kann ich das nicht mit Bestimmtheit sagen). Kleines Testprog:
------------------------------------------- #include <string> #include <iostream.h>
void main() { string s = "Hello, World"; //;) cout <<s <<"\n"; } ---------------------------------------------
Na, ist _das_ nicht elegant? Informationen dazu gibt es unter /usr/doc/STL oder so ähnlich (zumindest bei mir hier ist die ziemlich grottenschlecht, ich kann dir zum Treffen auch eine iX mitbringen, da ist das etwas besser erklärt)
Ich danke Euch schon im voraus.
Gruß Tilo
cu, Ulf