Expressie moet een aanwijzer zijn naar een volledig objecttype met behulp van eenvoudige rekenkundige aanwijzers

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 voidheeft 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.

Other episodes