大峰98
2017-07-14 16:23
采纳率: 70%
浏览 1.2k
已采纳

C 嵌套调用交换函数swap

我定义了一个数组int a[5];
声明了两个函数,一个是赋值函数,一个是交换函数
void f1(int *a)
{
a[0]=1;
a[1]=2;
}

void swap(int *x,int *y)
{
int *temp;
*temp=*x;
*x=*y;
*y=*temp;
}

现在,我要使用函数嵌套调用去交换a[0]与a[1]的值,是这样写是正确的
void f1(int *a)
{
a[0]=1;
a[1]=2;
swap(a[0],a[1]);
}

还是这样写是正确的?
void f1(int *a)
{
a[0]=1;
a[1]=2;
swap(&a[0],&a[1]);
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • blownewbee 2017-07-15 00:45
    已采纳
     void swap(int *x,int *y)
    {
    int temp;
    temp=*x;
    *x=*y;
    *y=temp;
    }
    
    swap(&a[0],&a[1]);
    
    点赞 打赏 评论
  • Sunyelw 2017-07-15 01:03

    首先,你要知道你是要交换a[0] a[1]之间的值,而不是交换它们的内存地址。
    然后,void swap(int *x,int *y)函数中,形参为指针类型,也就是说是地址,而函数内容交换的值则是该地址所存储的数据。
    这样就清楚了,形参写入所要交换的值的地址,然后地址存储的值得到交换。
    所以 swap(&a[0],&a[1])。

    点赞 打赏 评论
  • 温良岁月 2017-07-15 01:49

    swap(a[0],a[1]); 这样写是错误的,你这样写相当于把a[0] 和 a[1] 的值当做地址去处理,编译可以通过,但是执行得不到你想要的结果。
    正确写法就是你下面这种,swap(&a[0],&a[1]); 也可以这样:swap(a, a+1);

    点赞 打赏 评论
  • 「已注销」 2017-07-15 03:14

    你的那个swap函数就写错了,里面怎么能用一个整数去交换整数呢?你这样有可能让程序崩溃,虽然说在大多数情况下很可能得到正确结果。

    点赞 打赏 评论
  • Victoria_Lian 2017-07-15 07:15
    void f1(int *a)
    {
        a[0]=1;
        a[1]=2;
        swap(&a[0],&a[1]);    //或者 swap( a , a+1);
    }
    void swap(int *x,int *y)
    {
        int temp;
        temp=*x;
        *x=*y;
        *y=temp;
    }
    
    点赞 打赏 评论

相关推荐 更多相似问题