使用XOR交换两个指针

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

所以我有以下内容:

#include  #include  #include  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 } 

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

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

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

指针上没有按位操作。 除了derefence之外,唯一可以对其进行操作的操作是+- 。 所以你需要转换为intptr_t并返回。

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

如果您使用的是C99或更高版本,则需要在操作之前将char *intptr_t ,然后在操作后转换回char *

您的错误消息:

二进制操作数无效^(有’char *’和’char *’)

告诉你,当你有了正确的概念时,操作符^不能用于指针。

请注意,如果您的目标是在不使用额外变量的情况下执行此操作(请注意,这在现代编译器上实际上并不高效),您可以使用加法和减法来执行此操作,这些指针确实支持得足够好。 有关详细信息, 请访问此站

intptr_t是一个用于保存指针值的整数类型。 注意intptr_t严格来说不是完全可移植的(可能没有可以保存指针的整数类型)。

* A = * B; 表示将一个b的char复制到一个不是整个字符串,Same适用于swapString函数,因此这将产生错误的值。

如果你尝试相同的字符串长度1这将工作..谢谢Vijayky