(编辑:缺少 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);
}
我知道可以使用其他版本的交换。但是,我想暂时专注于这个特定的……我不喜欢盲目地键入代码。你能帮我更好地理解错误的来源/原因吗?
有几个不同的答案:
依次考虑这些:
1。我知道那个交换宏想要做什么,但是,说真的,有什么好处?说啊
char *tmp = t1;
t1 = t2;
t2 = tmp;
每个人都知道这意味着什么。不需要诡计。
在我看来(有些人可能不同意),没有好的交换宏这样的东西。每个交换宏引入的问题都多于它解决的问题。
2。您的“棘手”交换宏,尽管它可能适用于整数(并且 miiiiiiiiiiight 适用于浮点数)不适用于指针,并且它不起作用的原因是 C 认为添加指针毫无意义到一个指针。您可以将整数添加到指针,但不能添加两个指针。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句