Forum: PC-Programmierung array element in struktur beschreiben


von Felix (Gast)


Lesenswert?

Guten tag,

ich habe ein array in file1.c
1
static const uint8_t address[] = {0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu};

in einer Funktion möchte ich eine Struktur beschreiben
1
typedef struct
2
{
3
  const uint8_t address[6];
4
  const uint8_t id;
5
}info_ts;

wie bekomme ich am geschicktesten address in der structur mit der 
globalen address beschrieben?
Meine Bisherige Möglichkeit ist
1
const info_ts info_s = 
2
{
3
  .address[0] = address[0],
4
  .address[1] = address[1],
5
... ... ...
6
  .id = 0x85
7
};
gibt es da noch eine kürzere möglichkeit das Array zu übertragen?

von Schlaumaier (Gast)


Lesenswert?

Du solltest die Programmiersprache genauer dabei schreiben.

Als ich das letzte mal jemand ein Tipp gegeben habe gab es Stress.

Aber ich versuche es mal damit.

https://www.delftstack.com/de/howto/cpp/cpp-struct-array/

von Felix (Gast)


Lesenswert?

Schlaumaier schrieb:
> Du solltest die Programmiersprache genauer dabei schreiben.

Das ganze möchte ich in c machen.

von Felix (Gast)


Lesenswert?

Schlaumaier schrieb:
> https://www.delftstack.com/de/howto/cpp/cpp-struct-array/

Ich möchte ja nicht ein array von strukturen,
sondern ein array in einer Struktur beschreiben

von N. M. (mani)


Lesenswert?

Felix schrieb:
> gibt es da noch eine kürzere möglichkeit das Array zu übertragen?

Du kannst eine normale Initialisierungsliste ohne Benennung der Member 
nehmen. Ist nur marginal kürzer und hat die Unschönheit dass es evtl. 
falsch initialisiert wird wenn sich die Position der Struktur Member 
ändert. So ist es also schon besser.

Bei Cpp könntest du für die Struct einen Konstruktor angeben:
1
struct info_ts
2
{
3
  const uint8_t address[6];
4
  const uint8_t id;
5
  
6
  info_ts(uint8_t* paddress, uint8_t _id)
7
  {
8
    memcpy(address, paddress, 6);
9
    id = _id;
10
  }
11
};

Bei C könntest natürlich auch deine Struktur ändern indem du nur einen 
Pointer auf die Adresse und evtl die Länge hast. Dann sparst du dir ein 
paar Byte und musst auch nicht so viel umkopieren.
1
typedef struct
2
{
3
  const uint8_t* paddress;
4
  const uint8_t  addrLen;
5
  const uint8_t id;
6
}info_ts;
7
8
const info_ts info_s = 
9
{
10
  .paddress = address,
11
  .addrLen  = sizeof(address),
12
  .id = 0x85
13
};

von Felix (Gast)


Lesenswert?

N. M. schrieb:
> typedef struct
> {
>   const uint8_t* paddress;
>   const uint8_t  addrLen;
>   const uint8_t id;
> }info_ts;

Die struktur ist allerdings ohne pointer vorgegeben

von Oliver S. (oliverso)


Lesenswert?

Felix schrieb:
> Meine Bisherige Möglichkeit ist1const info_ts info_s =
> 2{
> 3  .address[0] = address[0],
> 4  .address[1] = address[1],
> 5... ... ...
> 6  .id = 0x85
> 7};
> gibt es da noch eine kürzere möglichkeit das Array zu übertragen?

memcpy.

Oliver

von N. M. (mani)


Lesenswert?

Oliver S. schrieb:
> memcpy.
> Oliver

Du hast das const vor der Destination gesehen?

: Bearbeitet durch User
von Felix (Gast)


Lesenswert?

N. M. schrieb:
> Oliver S. schrieb:
>> memcpy.
>> Oliver
>
> Du hast das const vor der Destination gesehen?

Ja, mit memcpy wäre das wesenstlich kürzer.
Aber wie N. M. auch gesehen hat, ist das alles const.
Werde es dann so belassen, dass ich jedes element einzeln schreibe.
Ist sind ja nicht so viele.

von Mikro 7. (mikro77)


Lesenswert?

Packe das Array in eine Struct. (So funktioniert bspw. auch std::array 
in C++.)

Gerade keine bessere Referenz gefunden...
https://stackoverflow.com/questions/35761518/why-struct-assignment-works-with-arrays-in-structs

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.