Arrays

Liebe Kollegen, Ich verstehe nicht ganz den Unterschied von der Arrays. Sie funktionieren zwar so wie ich es möchte aber verstehen möchte ich es trotzdem  Bsp:

char* AusgabeTextSerial[] = {"Sensor wird Kalibriert", "Kalibrierung Erfolgreich","Bewegung registriert"};

Was macht der Stern? Es geht ja auch ohne?

ODER

char *AusgabeTextSerial[] = {"Sensor wird Kalibriert", "Kalibrierung Erfolgreich","Bewegung registriert"};

Was macht der Stern jetzt?

ODER

char AusgabeTextSerial[] = „Sensor wird Kalibriert", "Kalibrierung Erfolgreich","Bewegung registriert";

Die Klammer bewirkt die was?

Besten Dank!

LG

Bitte die Grundlagen, zu der Sprache lernen, welche du verwendest!

ZB. Hier: zum */Pointer und auch Array

Arrays sind in C++ keine Objekte. Sondern nur reservierter Speicher. Und Array-Variablen sind automatisch Zeiger auf das erste Element. Ein C String ist ein char Array, und damit auch ein Zeiger auf das erste Element. Also sind Arrays aus C Strings Arrays aus Zeigern.

char var: Array aus char → ein C String
char* var: Array aus char* (Zeiger auf char) → Array aus C Strings

Wo der Stern steht ist egal. Man sieht beides. Aber für mich gehört er eigentlich zum Datentyp. Nicht zur Variablen

Die { } ist für Initialisierungen. Auch das sind Grundlagen

Serenifly: Wo der Stern steht ist egal. Man sieht beides. Aber für mich gehört er eigentlich zum Datentyp. Nicht zur Variablen

Betrachten wir mal diese 2 Programmzeilen:

char* a,b,c;

char *a,b,c;

Beide Zeilen sind syntaktisch korrekt, und beide Zeilen führen zum gleichen Ergebnis. Nur, welche Schreibweise verdeutlicht das Ergebnis, und welche verschleiert es eher?

Nur a ist ein Pointer auf ein char, b und c sind einfache char-Variable. Für den Compiler gehört der * zur Variablen! Auch das ist korrekt:

char a,b,*c;

Ja, das ist einer der Fälle wo es bei der Variablen besser ist. Bein const und const/const Zeigern kann es auch schwierig sein herauszufinden was gemeint ist.

Ich umgehe das einfach in dem ich nicht mehrere Variablen in einer Zeile deklariere :)

Ja, kann man natürlich machen (mache ich auch manchmal so :slight_smile: ).
Ich halte es aber einfach für gefährlich, sich Denkweisen anzueignen, die nicht zum Verhalten des Compilers passen - vor allem hier, wo viele Anfänger unterwegs sind, für die sowas böse Fallen sein können.

Serenifly: Ich umgehe das einfach in dem ich nicht mehrere Variablen in einer Zeile deklariere :)

Ach, Du bist das? Ich dachte, ich sei der Einzige, der sich solcher Workarounds bedient :-)

Gruß

Gregor

"Normale" Variablen lege ich schon mal mehrere in einer Zeile an. Pointer immer einzeln.

Gruß Tommy

Globale Variable sollten eine Beschreibung haben. Das spricht für max 1 Variable je Zeile.

Lokale Variable kann man definieren, wo sie initialisiert werden, da ist dann auch eine eigene Zeile am besten:

float spannung = analogRead(A0)*5.0/1024; // nur mal als Beispiel für eine lokale Variable
char* a, b, c;  // eher ein Rätsel / Trickaufgabe als empfehlenswerter Stil

Nicht initialisierte Zeiger sind übrigens immer Mist, auch wenn es erlaubt ist.

michael_x: Globale Variable sollten eine Beschreibung haben. Das spricht für max 1 Variable je Zeile.

Das gilt nicht nur globale Variable. Ich kommentiere grundsätzlich jede Variable, die ich deklariere. Was mir als Zehn-Finger-Tipper aber auch echt nicht schwer fällt. Kommentare sind zwar eine lästige Sache, wenn man nur mal schnell etwas testen möchte, aber es dauert oft keine Woche, bis ich mich nicht mehr daran erinnern kann, was genau ich bei welcher Codezeile gedacht habe. Und häufig ist der Code, der experimentell entstanden ist, genau der Code, der im fertigen Sketch landet. Und wenn ich beim Kommentieren besonders geizig bin, bekommt eine Funktion zumindest eine Beschreibung

...// Bekommt: ... Liefert zurück ...

Gruß

Gregor

Ich kommentiere grundsätzlich jede Variable

for( byte i = 0; i < size; i++ ) { // einigermaßen selbsterklärend, auch was den vorgesehenen Wertebereich angeht :) 
   ...
}

Aber grundsätzlich gebe ich dir Recht

Ja, Thema ‘Programmierstil’ - immer wieder gerne genommen :wink: . Ist aber ja auch wichtig, damit übersichtliche Programme entstehen.
Meine kleinen Programmzeilen waren ausschließlich dazu gedacht, zu zeigen, dass der Compiler das ‘*’ der Variablen zuordnet, und eben nicht dem Typ.

Dass es durchaus sinnvoll ist, i.d.R jede Variable in einer einzelnen Zeile zu definieren ist eine andere Geschichte. Dann stimmt es schon, dass man das Sternchen auch direkt beim Typ plazieren kann. Trotzdem sollte man sich bewusst sein, dass der Compiler es nunmal anders sieht.
Auch jede Variablendefinition ordentlich zu kommentieren ist richtig. Allerdings finde ich es noch wichtiger, aussagekräftige Variablennamen zu verwenden. Das hilft nicht nur dort, wo die Variable definiert wird, sondern auch dort, wo sie angewendet wird. Nur könnte man dann vielleicht wieder auf die Idee kommen, doch mal 2 zusammengehörige (Pointer-) Variablen in einer Zeile zu definieren … :wink:

Neben allen Stilelementen, die ein Programm für den menschlichen Betrachter übersichtlicher macht, ist es eben immer auch wichtig zu wissen, wie der Compiler es sieht. Das sind halt manchmal 2 durchaus unterschiedliche Betrachtungsweisen :slight_smile: :slight_smile:

MicroBahner: Das [mit den unterschiedlichen Programmierstilen] sind halt manchmal 2 durchaus unterschiedliche Betrachtungsweisen :) :)

Ich streiche „manchmal“ und ersetze durch „meistens“. Ich versuche immer so zu programmieren, dass es auch ein sehr oberflächlich Kundiger versteht. Das ist üblicherweise zwar mehr Tipperei, aber wenn es irgendwann um Wartung geht, freue ich mich.

Naja, und wenn der Kunde Stilvorgaben macht, gelten halt die.

Gruß

Gregor