array element in struktur beschreiben

Gast #7002606
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?
#7002624
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
};
Gast #7003153
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren