Springen naar inhoud

Vreemde constructie in C.


  • Log in om te kunnen reageren

#1

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 30 juli 2012 - 20:30

wat betekent (void*)? als je in c (int) zet dan cast je de waarde naar een int maar wat krijg je als je (void) zet? en wat als je (void*)?

iemand enig idee?
Groeten.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Typhoner

    Typhoner


  • >1k berichten
  • 2446 berichten
  • VIP

Geplaatst op 30 juli 2012 - 20:35

dat is een void-pointer. Het is een pointer waarvan nog niet is aangegeven naar wat voor type deze precies wijst. Een functie als malloc() levert een void-pointer af, gezien de functie zelf niet weet waar je het stukje geheugen voor wil gaan gebruiken.

Zie hier voor wat uitleg (onder de sectie "void pointers"), maar met de term "void pointer" op google kan je waarschijnlijk sneller geraken naar wat jij specifiek wil hebben?

Veranderd door Typhoner, 30 juli 2012 - 20:36

This is weird as hell. I approve.

#3

JorisL

    JorisL


  • >250 berichten
  • 555 berichten
  • Ervaren gebruiker

Geplaatst op 31 juli 2012 - 00:10

Een voorbeeldje waarbij ikzelf dat gebruikt heb is bij simulaties.
Je hebt daarbij vaak een heel scala aan parameters die je eventueel stap voor stap wilt toevoegen.
Als je dan een soort van configuratie bestand gebruikt, krijg je een heel aantal parameters die we dan in een union stopten. Omdat deze bij het compileren niet perse gekend hoeft te zijn als je een flexibel programma schrijft, gebruikt je een void pointer om de parameters door te geven. Naderhand kan je deze dan casten in je functies zodat alles beschikbaar wordt.

#4

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 31 juli 2012 - 21:14

een soort van place holder dus? ik heb een functie die zo'n parameter meekrijgt dma_transfer(chn,begin,(void*) einde, hoeveelh,n_bytes)

toch is het moeilijk het nut er van in te zien.

#5

Typhoner

    Typhoner


  • >1k berichten
  • 2446 berichten
  • VIP

Geplaatst op 31 juli 2012 - 21:48

om er toch even malloc() bij te halen: dat is een standaardfunctie (in stdlib.h) die een blok geheugen van een bepaalde grootte reserveert en er pointer naar aflevert.

float *x;
/* x wijst nu naar een array van 2 floats */
x = malloc (2*sizeof(float));
double *y;
/* y wijst, met dezelfde malloc-aanroep, naar een double */
y = malloc (2*sizeof(float));

door malloc() een void-pointer te laten afleveren kan je de functie geldig maken voor eender welk datatype, ook voor één dat je zelf definieert:

/* een of ander eigen type */
mijnType *x;
/* Array van twee mijnTypes */
x = malloc(2*sizeof(mijnType));
This is weird as hell. I approve.

#6

Bart

    Bart


  • >5k berichten
  • 7224 berichten
  • VIP

Geplaatst op 01 augustus 2012 - 06:35

Nu ben ik wel benieuwd of het gebruik van void* / malloc een nette manier van programmeren in C is? Of is void* de functionele tegenhanger van de in OOP gebruikte "Object", waarvan alle bestaande types van afgeleid zijn.
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

#7

Typhoner

    Typhoner


  • >1k berichten
  • 2446 berichten
  • VIP

Geplaatst op 01 augustus 2012 - 15:23

B. Stroustrup schrijft dat een C++ programmeur klassen/objecten moet vervangen door structs/typedefs en op dezelfde manier new/delete moet vervangen door malloc/free. Of natuurlijk varianten daarop: GSL en de Linuxkernel hebben hun eigen implementaties die zoiets doen.

Dus ik zou zeggen dat het typisch is, ja.

Verder gebruikt new in C++ under the hood ook gewoon void*

Veranderd door Typhoner, 01 augustus 2012 - 15:36

This is weird as hell. I approve.

#8

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 01 augustus 2012 - 19:41

bedankt dat werkt verhelderend.
Groeten.

#9

Typhoner

    Typhoner


  • >1k berichten
  • 2446 berichten
  • VIP

Geplaatst op 01 augustus 2012 - 19:57

B. Stroustrup schrijft dat een C++ programmeur (...)


moet nog bij komen: "... die toevallig in C terechtkomt"

Veranderd door Typhoner, 01 augustus 2012 - 19:58

This is weird as hell. I approve.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures