jiuyuan 发表于 2019-8-14 17:47:51

各位看代码吧

#include <stdio.h>

void place_swap(int *x,int *y)
{
        *x=*x^*y;
        *y=*x^*y;
        *x=*x^*y;
}
void reverse(int s[],int n)
{
        int first,last,i;
        for(first=0,last=n-1;first<=last;first++,last--)
        {
                place_swap(&s,&s);
                printf("%d   %d",s,s);
        }
        putchar('\n');
        for(i=0;i<n;i++)
        printf("%d   ",s);
}

int main()
{
        int a=3,b=3;
        int s[]={1,2,3,4,5};
        place_swap(&a,&b);
        reverse(s,5);
        printf("\n%d%d",a,b);
       
        return 0;
}

/****************************************************************************************************************************************************
这是运行结果
5   14   20   0
5   4   0   2   1   
33

第一行,for执行了3次,不是应该打印6个数吗?
第三行,结果不应该是0 0吗?(数组的s的结果都是0了)
各位看看,给点看法。

迷雾少年 发表于 2019-8-14 18:06:30

首先是6个数。14是1 4 你没加空格所以黏在一起了,第三行你输出的是s b不关s得事吧

迷雾少年 发表于 2019-8-14 18:09:17

其次你那个用异或交换值的算法有问题,当x y是同一个变量的时候,这个变量就变成0了

jiuyuan 发表于 2019-8-14 18:17:57

迷雾少年 发表于 2019-8-14 18:09
其次你那个用异或交换值的算法有问题,当x y是同一个变量的时候,这个变量就变成0了

这个我知道,所以a,b执行那个算法之后,结果应该就是0 0 啊,但是第三行结果怎么是 3 3

jiuyuan 发表于 2019-8-14 18:19:12

迷雾少年 发表于 2019-8-14 18:06
首先是6个数。14是1 4 你没加空格所以黏在一起了,第三行你输出的是s b不关s得事吧

我忘了第二个要输出的参数加空格了
第三行我要输出的是a,b啊

迷雾少年 发表于 2019-8-14 19:31:33

本帖最后由 迷雾少年 于 2019-8-14 19:59 编辑

jiuyuan 发表于 2019-8-14 18:19
我忘了第二个要输出的参数加空格了
第三行我要输出的是a,b啊

第三行是输出a b啊 a和b都是3啊

wwhywhy 发表于 2019-8-14 21:00:36

这个是你的函数定义:
void place_swap(int *x,int *y)
{
      *x=*x^*y;
      *y=*x^*y;
      *x=*x^*y;
}
这个是条件:
int a=3,b=3;
在函数place_swap(3,3)中,第一行:
*x=*x^*y;
执行之后,*x = 0, *y = 3
然后第二行:
*y=*x^*y;
执行之后,*x = 0, *y = 3
最后,执行第三行:
*x=*x^*y;
各个变量的值:*x = 3, *y = 3
所以最后的输出为:3,3 没有问题啊

jiuyuan 发表于 2019-8-14 21:25:49

wwhywhy 发表于 2019-8-14 21:00
这个是你的函数定义:
void place_swap(int *x,int *y)
{


嗯,我懂了,a,b不是一个变量。
页: [1]
查看完整版本: 各位看代码吧