我有一个包含指针的数组。我怎样才能正确交换两个指针 - 比如数组[1]和数组[4]?
答案 0 :(得分:5)
您需要一个临时变量:
void*temp = array[4];
array[4]=array[1];
array[1] = temp;
编辑固定的第一行。
答案 1 :(得分:5)
void* temp = array[1];
array[1] = array[4];
array[4] = temp;
答案 2 :(得分:3)
最正确的方法是使用临时变量,如:
void *tmp_pointer;
....
tmp_pointer = array[1];
array[1] = array[4];
array[4] = tmp_pointer;
....
远离任何邪恶的位置或黑客攻击! :)
我在这里补充说我们应该问“什么类型的指针?”
理论上,你不能安全地将指针与数据和指针混合起来。 C标准并不保证这有意义或根本不可能。它只能确保:
void *
据我所知,这是因为在某些架构中,数据的地址空间与函数的地址空间完全分开,并且您无法安全地从指针类型转换为另一种类型的指针。
答案 3 :(得分:1)
#include <stdint.h>
if (1 != 4) {
array[1] = (void*)((intptr_t)(array[1]) ^ (intptr_t)(array[4]));
array[4] = (void*)((intptr_t)(array[1]) ^ (intptr_t)(array[4]));
array[1] = (void*)((intptr_t)(array[1]) ^ (intptr_t)(array[4]));
}
更清晰,省时。 ; - )
答案 4 :(得分:0)
我的C很生锈,但很简单
int* foo = array[4];
array[4] = array[1];
array[1] = foo;
应该足够了。