【发布时间】:2012-04-02 04:59:22
【问题描述】:
我有一个问题,涉及调用一个带有指向指针的指针的 2 个参数的函数
int main(void)
{ ...
int *ptrp = &p, *ptrq = &q;
int **ppp = &ptrp, **ppq = &ptrq;
swap_ptr(ppp,ppq);/* &ptrp, &ptrq passed */
/* to swap_ptr() */
return 0;
}
void swap_ptr(int **ptrA,int **ptrB)...
我们必须交换 ptrp 和 ptrq 的值,那么这是否意味着在 swap_ptr 函数中我只是使用 *ptrA 和 *ptrB 来交换它们,还是其他一些指针语句?
谢谢
【问题讨论】:
-
你的问题有答案,所以我不太确定为什么需要问它......
-
您也可以使用XOR swap 来交换指针...
-
@0x69 有趣的事实:如果异或交换两个相同的指针,那么它们都将被设置为 NULL 指针。
-
@Corbin 这取决于您的意思是“相同的指针”。如果它意味着相同的指针变量 - 那么是的,你不能交换相同的 var - XOR交换必须应用于存储在不同内存地址的两个变量。但是,如果说“相同的指针”是指指向相同地址的不同指针变量 - 那么不,您可以完美地交换这两个指针。例如 - 下面的代码在 XOR 交换适用性方面 100% 有效 =>
-
void xorSwap (int **x, int **y) { if (x != y) { *x = (int*)((int)*x ^ (int)*y); *y = (int*)((int)*x ^ (int)*y); *x = (int*)((int)*x ^ (int)*y); } } int main(void){ int a = 7; int b = 11; int * pa = &b; int * pb = &b; printf("before %p %p / %d %d\n", pa, pb, *pa, *pb); xorSwap(&pa, &pb); printf("after %p %p / %d %d\n", pa, pb, *pa, *pb); return 0; }