C:交换数组中的指针

时间:2010-01-19 14:04:16

标签: c pointers

我有一个包含指针的数组。我怎样才能正确交换两个指针 - 比如数组[1]和数组[4]?

5 个答案:

答案 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 *
  • 转换回来
  • ((void *)0)是一个与任何数据指针或函数指针不同的指针
  • 一种类型的函数指针可以转换为另一种类型的函数指针并返回。

据我所知,这是因为在某些架构中,数据的地址空间与函数的地址空间完全分开,并且您无法安全地从指针类型转换为另一种类型的指针。

答案 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;

应该足够了。