The Pointer is pointing on you...
-
err0r schrieb:
Denn du übergibst einen Zeiger auf das Array, dessen Inhalt in der Funktion geändert wird. Darum muss nix zurückgegeben werden.
Es sei denn, er will die Rückgabe gleich in Ausdrücken verarbeiten können. Dann könnte er schon den übergebenen Pointer noch mal zurückgeben. Obwohl ich das eigentlich nie so mache...
Alter Zeh schrieb:
das war nicht gegen dich gerichtet, mehr gegen die leute, die propagieren man sollte lieber gar nicht erst den "alten, unnötigen c mist" lernen.

-
Huch, ich hatte schon die Schnur um meinen Hals gebunden und noch zum Schluss etwas geändert und es hat geklappt...
Folgende Fragen: (Siehe Kommentare)void rot3_func(char* p) { for(int i=0;p[i]!='\0';i++) p[i]+=3; } int main() { char eingabe[1024] = {0}; std::cout << "Geben Sie den Text ein:" << std::endl; std::cin >> eingabe; rot3_func(eingabe); //Wieso darf ich nicht: rot3_func(&eingabe); schreiben? Oo for(int i=0; eingabe[i]!='\0';i++) //Kann ich es auch ohne For-Schleife ausgeben lassen? std::cout << eingabe[i]; }Danke nochmal für eure Hilfe!

-
1. Weil der Name eines Arrays ohne Operator [] schon die Adresse (des ersten Elements) darstellt. Du würdest also die Adresse der Adresse übergeben (gibts auch, macht hier aber keinen Sinn).
2. Probier mal
std::cout << eingabe;
-
Ahhh, verstehe!
2. Ohh sieht doch gleich besser aus
Danke!Lg Mentras
-
Du kennst aber
std::string?Ich verstehe schon, dass es dir hier eher ums Verständnis von Zeigern geht. Wenn du aber etwas erreichen willst (z.B. Verschlüsselung), solltest du moderne C++-Mittel verwenden.
-
Nexus schrieb:
Du kennst aber
std::string?Ich verstehe schon, dass es dir hier eher ums Verständnis von Zeigern geht. Wenn du aber etwas erreichen willst (z.B. Verschlüsselung), solltest du moderne C++-Mittel verwenden.
Jap ich habe ja oben gesagt, dass ich es mal mit C-String versuchen will x)
String wäre ja kein Problem für mich gewesen.
Ich kann dir auch versichern, dass ich wenn ich mich in den Bereich der Kryptographie nisten will, meine Verschlüsselungen mit std::string verschlüssele x)
Lg Mentras
-
Mentras schrieb:
char eingabe[1024] = {0}; //... rot3_func(eingabe); //Wieso [...] nicht: rot3_func(&eingabe);eingabe ist ein array von char und die Funktion erwartet ein char*. C und C++ führen hier einen "Array-zu-Zeiger-Verfall" durch. Dabei wird ein Zeiger erzeugt, der auf das erste Element des Arrays zeigt. Von Hand durchgeführt müsste es dann so aussehen:
rot3_func(&eingabe[0]);Man achte auch auf die Präzedenz der Operatoren. Zunächst werden die Operatoren auf der rechten Seite von innen nach außen verarbeitet und dann die Operatoren auf der linken Seite von innen nach außen ==> Zeiger auf das erste Element. Wenn Du den Addressoperator auf das Array loslässt, bekommst Du einen Zeiger auf ein Array und nicht einen Zeiger auf das erste Element:
char (*parray)[1024] = &eingabe; // parray ist ein Zeiger auf ein Array von charGruß,
SP
-
Sebastian Pizer schrieb:
Mentras schrieb:
char eingabe[1024] = {0}; //... rot3_func(eingabe); //Wieso [...] nicht: rot3_func(&eingabe);eingabe ist ein array von char und die Funktion erwartet ein char*. C und C++ führen hier einen "Array-zu-Zeiger-Verfall" durch. Dabei wird ein Zeiger erzeugt, der auf das erste Element des Arrays zeigt. Von Hand durchgeführt müsste es dann so aussehen:
rot3_func(&eingabe[0]);Gruß,
SPOh, nagut ich versuch´s mal wiederzugeben was ich verstanden habe...
Wenn ich den &-Operator verwenden wollte hätte ich´s so machen müssen:
Beim Aufrufen:
for(int i=0;eingabe[i]!='\0';i++) rot3_func(&eingabe[i]);Wäre natürlich jetzt etwas umständlicher, aber mir geht´s jetzt nur ums verstehen.
Lg Mentras
-
Mentras schrieb:
Wenn ich den &-Operator verwenden wollte hätte ich´s so machen müssen:
for(int i=0;eingabe[i]!='\0';i++) rot3_func(&eingabe[i]);Nein. Einfach
rot3_func(&eingabe[0]);Hier ist ein anderes Beispiel
char array[999]; char* p1 = array; // "array-to-pointer decay" (automatisch) char* p2 = &array[0]; // manuellp1 und p2 zeigen jeweils auf das erste Element des Arrays.
Gruß,
SP
-
Sebastian Pizer schrieb:
Mentras schrieb:
Wenn ich den &-Operator verwenden wollte hätte ich´s so machen müssen:
for(int i=0;eingabe[i]!='\0';i++) rot3_func(&eingabe[i]);Nein. Einfach
rot3_func(&eingabe[0]);Hier ist ein anderes Beispiel
char array[999]; char* p1 = array; // "array-to-pointer decay" (automatisch) char* p2 = &array[0]; // manuellp1 und p2 zeigen jeweils auf das erste Element des Arrays.
Gruß,
SPUnd der Zeiger ändert dann alle Elemente in der Funktion?