使用XOR交换两个指针

Vic*_* J. 0 c swap xor

我有一个关于使用XOR两个交换两个字符串文字的快速问题.

所以我有以下内容:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void intSwap(int *a, int *b){
    *a=*a^*b;
    *b=*a^*b;
    *a=*a^*b;
}


void swapString(char **a, char **b){
    char *temp=*a;
    *a=*b;
    *b=temp;
}

void main(){
    char *s= "ha";
    char *t= "Oh";

    printf("%s and %s \n",s,t); // prints ha Oh
    swapString(&s,&t);
    printf("%s and %s \n",s,t); // prints Oh ha


    int a=10;
    int b=5;
    printf("%d %d\n",a,b); //print 10 5
    intSwap(&a,&b);
    printf("%d %d\n",a,b); //print 5 10
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用二进制运算XOR来表示intSwap.但是,当我尝试使用swapString做同样的事情时,它不起作用.

我收到错误消息说:二进制操作数无效^(有'char*'和'char*')

你知道如何使用XOR交换两个字符串文字吗?在C中有可能吗?谢谢!

phu*_*clv 8

指针上没有按位操作.除了derefence之外,唯一可以采取行动的行动是+-.所以你需要投射++回来.

无论如何,这是一个不好的做法,不会为你节省任何周期.编译器将使用简单的分配识别交换并为您优化.