Ваш код не имеет смысла.У вас нет гарантии того, где a, i0, b, i1, c и i2 определены в памяти при их создании, поэтому вы не можете использовать арифметику указателей для перехода от адреса a (ptr = & a) к i0.
Если вы хотите, чтобы ptr соответствовал местоположению i0, вы можете сделать ptr = & i0.Если i0 было целым числом (которое оно есть), оно будет иметь размер 4 байта, поэтому вы можете использовать арифметику указателя для перемещения по этому целому числу 1 бит за раз, если указатель равен void / char.