0

即使在使用指针之后,数字也不会在主函数中交换。我知道有一些原因,但找不到它是什么?

#include <stdio.h>

void swap(int*, int*);

int main()
{
    int *ptr, *ptr2;

    int num1 = 90;
    int num2 = 900;

    ptr = &num1;
    ptr2 = &num2;

    printf("Before swapping the values : %d : %d \n", *ptr, *ptr2);
    swap(&num1,&num2);
    printf("After calling the swap function : %d : %d \n", *ptr, *ptr2);

    return 0;
}

void swap(int *ptr, int *ptr2)
{
    int *temp;

    temp = ptr;
    ptr = ptr2;
    ptr2 = temp;

    printf("In the swap function : %d : %d\n", *ptr, *ptr2); 
}

输出仍然是 90 900

4

3 回答 3

6

您正在交换指针,而不是指向的值。将交换函数更改为:

void swap(int *ptr, int *ptr2)
{
    int temp = *ptr;
    *ptr = *ptr2;
    *ptr2 = temp;
}
于 2013-09-26T20:50:46.907 回答
0

您可能打算做的是交换值而不是指针(由于“按值复制”,它们甚至没有在 main 中交换)您可能打算:

void swap(int *ptr, int *ptr2)
{
    int temp = *ptr;
    *ptr= *ptr2;
    *ptr2 = temp;
}
于 2013-09-26T20:57:39.220 回答
0

您正在交换指针的本地副本,而不是它本身的数据。你应该这样做:

void swap(int * ptr,int *ptr2)
{
int temp;

temp=*ptr;
*ptr=*ptr2;
*ptr2=temp;
}

在 main() 中不需要 ptr 和 ptr2。

于 2013-09-26T20:52:39.117 回答