(编辑:t1的数据类型,t2不再缺失)
#include <stdio.h>
#define SWAP(a, b) a = ( a = a + b, b = a- b, a-b )
int main()
{
char *names[] = {"Pat", "Bob", "Ted", NULL};
char *t1 = names[1];
char *t2 = names[2];
printf("%d %d\n",t1,t2);
SWAP(t1,t2);
printf("%d %d\n",t1,t2);
}
我知道其他版本的交换可行。但是,我想专注于这个特定的一个只是为了一个妈妈......我不喜欢盲目地输入代码。您能否帮助我更好地了解错误的来源/原因?
答案 0 :(得分:3)
有几个不同的答案:
依次采取这些:
1。我知道交换宏正在尝试做什么,但是,严肃地说,它的优点是什么?只是说
char *tmp = t1;
t1 = t2;
t2 = tmp;
每个人都知道这意味着什么。不需要任何技巧。
在我看来(有些人可能不同意),没有好的交换宏这样的东西。每个交换宏引入的问题都比解决的问题多。
2。你的&#34;棘手&#34;交换宏,虽然它可能适用于整数(并且miiiiiiiiight工作为浮点)不适用于指针,它不起作用的原因是C认为它没有意义添加指向指针的指针。您可以向指针添加整数,但不能添加两个指针。