Go Down

Topic: 433MHz virtualWire Datentypen (Read 1 time) previous topic - next topic

Tommy56

Ja, das habe ich gemerkt.

Array --> Pointer = ok
Pointer --> Array = Fehler

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Mahimus

Das mag dir pingelig erscheinen, ....

Nein, soweit ich folgen konnte war das verständlich. Hälst du meine letzte Version des Codes demnach für gut, in dem ich den "Umweg" gehe und einen extra Zeiger definiere?

byte *Z_Power = &Power[0];

combie

#32
Nov 22, 2019, 11:22 pm Last Edit: Nov 22, 2019, 11:24 pm by combie
Ob ich das gut finde?
Dafür ist mir der Kontext noch zu fremd.

> byte *Z_Power = &Power[0];
Wäre mir zu kompliziert....

byte *Z_Power = Power;
Denn es zerfällt automatisch.
Dank der Äquivalenz.
Das tuts in allen C und C++ Versionen seit  19xx

Wenn man was bewegliches benötigt, und sowas ist ein Zeiger ja, dann ist das schon voll ok.
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

michael_x

#33
Nov 23, 2019, 01:57 am Last Edit: Nov 23, 2019, 01:58 am by michael_x
Quote from: Tommy56
Pointer --> Array = Fehler
Kann man so krass auch nicht stehen lassen :)

Code: [Select]
int a[] {1, 2, 3, 4, 5};
void setup() {
  Serial.begin(9600);
  int* p = a+1;  // Ein Pointer ...
  // ... kann oft wie ein Array verwendet werden (zeigt auf a[1]... )
  Serial.println ( p[0] ); // 2
  p++;  // kann sich auch ändern ( zeigt jetzt auf a[2]... )
  Serial.println ( p[1] ); // 4  ( der Inhalt von a[3] )
  // ... auch wenn ein Pointer eigentlich kein Array ist
  Serial.println (sizeof(p)); //  2  (Ein Zeiger bei normalen Arduinos ist 2 byte groß)
  Serial.println (sizeof(*p)); //  2  (Ein int bei normalen Arduinos ist 2 byte groß)
  Serial.println (sizeof(p[0])); //  2  (Auch das ist sizeof(int) )
}
Nicht sinnvolles, nur ein Gegenbeispiel.

Zeiger haben übrigens den Nachteil, dass sie auch mal nirgendwohin zeigen können.
Und haben wie Arrays den Nachteil, dass Fehladressierung (außerhalb des definierten Bereichs) möglich ist. (Mit undefiniertem Ergebnis).


Quote from: combie
2[msg] ist auch dazu Äquivalent
Da ist combie aber der Einzige, den ich kenne, der sowas schreibt.
Das brauchst du nicht zu lernen, Mahimus.

Mahimus

Da ist combie aber der Einzige, den ich kenne, der sowas schreibt.
Das brauchst du nicht zu lernen, Mahimus.
Ja ich bin mittlerweile ausgestiegen und erfreue mich an meinem RC Code und was ich tolles damit anstellen kann.

Danke euch für die Hilfe!

Mahimus

Hier nochmal was fürs Auge:Video Remote Control

Ich finde das kommt in diesem Forum etwas zu kurz.

michael_x

Ich finde das kommt in diesem Forum etwas zu kurz.
Schön. Prima, dass deine Probleme gelöst sind und du vorerst genug gelernt hast.
Das kannst gern in der "fertigen" Version hier, oder separat unter einem anderen Titel als nur "virtualWire DatenTypen",  oder im Sammelthread Coole Projekte vorstellen.

Tommy56

Kann man so krass auch nicht stehen lassen :)
Du hast es falsch verstanden:
Code: [Select]

char a[4] = "abc";
char b[6];
char *c = strcpy(b,a); // c zeigt auf b
a = c; // <-- Fehler bei Zuweisung an Array


Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up