Ik probeer wat basisberekeningen uit te voeren met een void *. Mijn eigenlijke code berekent een offset door sizeof te gebruiken en vervolgens te vermenigvuldigen. Hier is een voorbeeldcode om een exemplaar van het probleem zelf te laten zien.
void * p;
p = 0;
p = p + 1;
Ik gebruik de MSVC-compiler in C (niet C++).
De fout is:
expression must be a pointer to a complete object type
Ik begrijp niet wat deze fout probeert te zeggen. Er is hier geen object of structuur.
Antwoord 1, autoriteit 100%
De rekenkunde van de aanwijzer is altijd in termen van de grootte van het (de) puntige object(en). Het verhogen van een char*
zal het adres met één verhogen, terwijl het voor int*
gewoonlijk vier (bytes) zou zijn. Maar void
heeft een onbekende grootte, dus rekenkunde van de aanwijzer op void*
is niet toegestaan door de standaard. Cast eerst naar het juiste type; als je het adres gewoon wilt manipuleren alsof het een getal is, cast dan naar char*
of gebruik intptr_t
.