Самый правильный способ - использовать временную переменную, как в:
void *tmp_pointer;
....
tmp_pointer = array[1];
array[1] = array[4];
array[4] = tmp_pointer;
....
Держитесь подальше от любого злого бита или хаков! :)
Позвольте мне добавить, что мы должны были спросить " какой тип указателя? "
Теоретически, вы не можете безопасно смешивать указатели с данными и указатели для работы. Стандарт C не гарантирует, что это будет иметь смысл или возможно вообще. Это только гарантирует, что:
- указатели данных могут быть преобразованы обратно и из
void *
- ((void *) 0) - указатель, который отличается от любого указателя данных или указателя функции
- функциональные указатели одного типа могут быть преобразованы в функциональные указатели другого типа и обратно.
Я понимаю, что это связано с тем, что в некоторых архитектурах адресное пространство для данных полностью отделено от адресного пространства для функций, и вы не можете безопасно преобразовывать указатели одного типа в другой и обратно.