Gå til innhold

initalisere array uten memset.


Anbefalte innlegg

Jeg driver opplæring av ferske studenter i c++. Et problem jeg stadig støter på er at studentene stadig gjør forutsettning om hva som ligger i arrays. Selv er jeg stort sett memset() for å slippe å gjøre forutsettninger om listene, men dette er c++ (ikke C), og jeg vil ikke lære bort min potensiellt dårlige kodestil.

Man kan fylle arrays med:

float values[2] = {0.0f, 0.0f};

men blir listene for store så blir det fort lovlig tungvint.

Hva er riktigst?

 

Videre ser jeg at studentene ofte slipper unna med det. Programmene deres kjører som en drøm.

Hvorfor det?

Lenke til kommentar
Videoannonse
Annonse
Jeg driver opplæring av ferske studenter i c++. Et problem jeg stadig støter på er at studentene stadig gjør forutsettning om hva som ligger i arrays. Selv er jeg stort sett memset() for å slippe å gjøre forutsettninger om listene, men dette er c++ (ikke C), og jeg vil ikke lære bort min potensiellt dårlige kodestil.

Man kan fylle arrays med:

float values[2] = {0.0f, 0.0f};

men blir listene for store så blir det fort lovlig tungvint.

Hva er riktigst?

 

Etter min mening er array noe som hører C til så det å bruk en C funksjon til å nullstille arrayene ser jeg ikke noe galt med.

Du kan eventulet lage en for loop som gjør det, men etter min mening blir det ikke bedre av det.

std::vector (som er c++`en sin "array") har parametret val i funksjonen resize som setter start verdien.

 

Videre ser jeg at studentene ofte slipper unna med det. Programmene deres kjører som en drøm.

Hvorfor det?

 

Det at det går bra for studentene kan ha noe med åssen programmer de bruker, jeg mener å huske at vc++ setter minnet til 0 i debug. Kan det være noe av det samme som får det til å fungere?

 

Lykke til og håper det hjalp

Lenke til kommentar
Man kan fylle arrays med:

float values[2] = {0.0f, 0.0f};

men blir listene for store så blir det fort lovlig tungvint.

Hva er riktigst?

Om jeg ikke husker helt feil, så vil dette også initialisere et array til null:

float values[100] = {0.0};

.. og dette er etter min mening en greiere måte å gjøre det på. Hva som er mest "riktig" og ikke, blir vel en smaksak.

Lenke til kommentar
Jepp, i C++ kan man skrive -

 

int my_array[256] = {0};

 

, og alle elementene vil bli satt til den første verdien. Kan noen bekrefte dette? Er det bare i C++, eller i C og?

 

I C vil bare det første elementet bli satt til verdien spesifisert.

Lenke til kommentar
Jeg driver opplæring av ferske studenter i c++. Et problem jeg stadig støter på er at studentene stadig gjør forutsettning om hva som ligger i arrays. Selv er jeg stort sett memset() for å slippe å gjøre forutsettninger om listene, men dette er c++ (ikke C), og jeg vil ikke lære bort min potensiellt dårlige kodestil.

 

Hva er galt med memset() brukt på arrays av POD i C++? Det til side, std::fill/std::fill_n er litt mer generiske og bedre tilpasset C++.

 

Videre ser jeg at studentene ofte slipper unna med det. Programmene deres kjører som en drøm.

Hvorfor det?

 

Vel, man trenger ikke å initialisere en array -- så lenge de ikke bruker en verdi før noe er lagret der (enten via initialisering eller tilordning til den aktuelle posisjonen i arrayen), så er alt i orden.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...