@TianCheng
2016-10-10 13:36
采纳率: 92.9%
浏览 2.4k
已采纳

C语言指针问题,通过指针交换地址

本人在学C语言指针,代码想要实现两个数从大到小输出,但是为什么实现不了?利用指针交换地址
#include
void swap(int *p1,int *p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}
void main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf("%d %d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if(a<b)
swap(pointer_1,pointer_2);

printf("%d %d\n",*pointer_1,*pointer_2);
}

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

8条回答 默认 最新

  • Sakura__Lu 2016-10-10 15:38
    已采纳

    你这是没弄清楚指针,指针就是一个地址,相当于你家的门牌号一样,只是一个标识数据存放位置的地方, 所以你要用指针指向的数据的时候应该是*p1而不是直接用p1,p1只是你家的门牌号而不是你家~( ̄▽ ̄~)~

    打赏 评论
  • threenewbee 2016-10-10 16:09

    通过指针交换地址需要用指针的指针,用指针交换值使用指针。

     #include <stdio.h>
    
    void swap(int **p1,int **p2)
    {
    int *temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
    }
    void main()
    {
    int a,b;
    int *pointer_1,*pointer_2;
    scanf("%d %d",&a,&b);
    pointer_1=&a;
    pointer_2=&b;
    if(a<b)
    swap(&pointer_1,&pointer_2);
    
    printf("%d %d\n",*pointer_1,*pointer_2);
    }
    
    3 打赏 评论
  • weixin_36358706 2016-10-10 14:21

    int temp
    temp = *p1
    *p1=*p2
    *p2=temp分号自己加

    打赏 评论
  • 即步 2016-10-11 03:55

    当传参时候又开辟了两个指针内存,这样调换的话main函数的int *pointer_1,*pointer_2的两个变量值没有改变

    打赏 评论
  • sam5828 2016-10-11 07:28

    传参的时候复制了一份,并不会改变实参的状况

    打赏 评论
  • sam5828 2016-10-11 07:29

    传参的时候复制了一份,不会改变实参的状况。

    打赏 评论
  • qq_33899413 2016-10-11 14:41

    #include

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

    int main(void)
    {
    int x = 5, y = 2;
    swap(&x, &y);
    printf("交换顺序后: x = %d, y = %d\n", x, y);
    return 0;
    }

    由于寝室要断网了 , 暂时就不详细解答了。抱歉

    打赏 评论
  • qq_33899413 2016-10-11 14:45

    #include

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

    int main(void)
    {
    int x = 5, y = 2;
    swap(&x, &y);
    printf("交换顺序后: x = %d, y = %d\n", x, y);
    return 0;
    }

     #include <stdio.h>
    
    void swap(int *x, int *y)
    {
        int temp;
        temp = *x;
        *x = *y;
        *y = temp;
    }
    
    int main(void)
    {
        int x = 5, y = 2;
        swap(&x, &y);
        printf("交换顺序后: x = %d, y = %d\n", x, y);
        return 0;
    }
    

    #include

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

    int main(void)
    {
    int x = 5, y = 2;
    swap(&x, &y);
    printf("交换顺序后: x = %d, y = %d\n", x, y);
    return 0;
    }

    打赏 评论

相关推荐 更多相似问题