Pointer auf Array übergeben

Hallo,

ich möchte gern eine Struktur in einem Array speichern und diese an eine andere Funktion übergeben.
(Hab ich hier mal vereinfacht dargestellt)

Wenn ich allerdings den String in einer anderen Funktion ausgebe, zeigt mein Serial Monitor nur wirres Zeug an.

Kann sich das jemand erklären, bzw mir zeigen wie das ganze richtig funktioniert?

Hier der Programmcode:

struct person{
String nachname;
};

void take_array(person *ptr)
{
person person_one;
person_one.nachname = "Mueller";
person person_array[] = {person_one};
ptr = &person_array[0];

}

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
person *ptr;

take_array(ptr);
Serial.println(ptr[0].nachname);

}

void loop() {
// put your main code here, to run repeatedly:

}

array_uebergabe.ino (447 Bytes)

It is a bad idea to use Strings in Arduino, as they tend to cause memory problems and program crashes.

Use C-strings (zero terminated character arrays) instead. Example of array of structures.

So in this case I have to add some C-Files to my header File?
Is that possible?
I just saw people adding cpp Files to their arduino programs.

But until today I am not familiar with the language c++.

c++ ist aber die Sprache des Arduino.
Die 0-terminierten-Char-Arrays heißen C-Zeichenketten, weil es die genau so in C gibt.

Gruß Tommy

void take_array(person *ptr)
{
  person person_one;
  person_one.nachname = "Mueller"; 
  person person_array[] = {person_one};
  ptr = &person_array[0];
}

Hier wird ein Zeiger auf eine lokale Variable zurückgegeben :astonished:

Um Objekte an Funktionen zu übergeben verwendet man in C++ nicht Zeiger, sondern Referenzen:
https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Weitere_Grundelemente/_Referenzen#Call-By-Reference

Und wenn du lokale Variablen nicht verstehst, solltest du const-Referenzen verwenden. Dann erlaubt der Compiler solchen Unsinn nicht

Tommy56:
c++ ist aber die Sprache des Arduino.

Das ist missverständlich. C++ ist eine Obermenge (quasi eine Erweiterung) von C. Man kann einen Arduino durchaus in purem C programmieren.

Gruß

Gregor

gregorss:
Das ist missverständlich. C++ ist eine Obermenge (quasi eine Erweiterung) von C. Man kann einen Arduino durchaus in purem C programmieren.

Satz 1 ist falsch.
Begründung hatten wir letztens noch.
(hasste wohl übersehen)

Satz 2 ist (fast) richtig.
Aber nicht mit der Arduino IDE

Merksatz:
Eine Unwahrheit wird nicht wahrer davon, wenn man sie häufiger erzählt.