Примечание. Я опытный программист на С++, поэтому мне не нужны никакие основы указателя. Это просто, что я никогда не работал с void**
и с трудом получаю мою ментальную модель, скорректированную на void*
vs. void**
. Я надеюсь, что кто-то сможет объяснить это в хорошем смысле, чтобы легче запомнить семантику.
Рассмотрим следующий код: (компилируется, например, VС++ 2005)
int main() {
int obj = 42;
void* ptr_to_obj = &obj;
void* addr_of_ptr_to_obj = &ptr_to_obj;
void** ptr_to_ptr_to_obj = &ptr_to_obj;
void* another_addr = ptr_to_ptr_to_obj[0];
// another_addr+1; // not allowed : 'void*' unknown size
ptr_to_ptr_to_obj+1; // allowed
}