我写了一个代码来交换两个号码,但只有一个号码被交换了 [已关闭]

I wrote a code to swap two numbers but only one of the numbers gets swapped [closed]

提问人:DANAB 提问时间:1/24/2023 更新时间:1/24/2023 访问量:58

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

10个月前关闭。

#include<stdio.h>

void swap(int *a , int *b){
    int temp;
    *a = temp;
    *a = *b;
    *b = temp;
}

int main()
{
    int x,y;
    printf("enter the first number : ");
    scanf("%d" , &x);
    printf("enter the second number : ");
    scanf("%d" , &y);

    printf("the value of x and y before swap are %d and %d and the address of x and y are %u and %u\n" , x , y , &x , &y);
    swap(&x , &y);
    printf("the value of x and y after swap are %d and %d and the address of x and y are %u and %u\n" , x , y , &x , &y);
    return 0;
}

我试图交换数字,而 X 的值与值 Y 交换,但 Y DOSENT 的值与 X 交换,它在输出中显示 -2。

C 指针 按引用交换

评论

6赞 Ian Abbott 1/24/2023
请不要大喊大叫!
2赞 Weather Vane 1/24/2023
错误的方式(编译器应该已经警告过)。 应该是请不要忽略或禁用编译器警告。*a = temp;temp = *a;
0赞 Retired Ninja 1/24/2023
int temp; *a = temp;该变量未初始化,因此您只是用不确定的值覆盖了指向的内容。tempa
0赞 DANAB 1/24/2023
哦,我现在明白了,thnx 指出来了
1赞 August Karlstrom 1/24/2023
Temp 几乎从来都不是一个好名字。请改为称其为 oldA

答:

1赞 Gabriel 1/24/2023 #1
void swap(int *a , int *b){
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
   
}

temp必须不是 必须*a*atemp