簡體   English   中英

為什么我在 output 中得到零?

[英]Why am I getting zero in the output?

所以我試圖在不使用第三個變量的情況下交換兩個數字。 我通過了我試圖通過引用交換的兩個數字。 當要交換相同的數字時(如 1 與 1 交換),我得到的 output 為零。 我知道如何解決這個問題,但我無法理解為什么當 a 和 b 相同時我一直得到 0。

誰能解釋為什么我得到零而不是交換的數字?

void swap(int *a,int *b)
{
        //if(a==b)
        //      return;
        *a=*a+*b;
        *b=*a-*b;
        *a=*a-*b;
}
int main()
{
    int n=3,x=0,y=0;
    int a[n][n];
    for(int i=0;i<n;i++)
                swap(&a[x][i],&a[i][y]);
    return 0;
}

您似乎正在嘗試將第一行的元素與第一列的元素交換。

對於初學者來說,可變長度 arrays 不是標准的 C++ 功能。 盡管有些編譯器有自己的語言擴展,但您應該避免使用它們。

此外,交換 function 可能具有未定義的行為,因為當有符號的 integer 溢出時,結果是未定義的。 最好使用標准的 C++ function std::swap 在您的程序中,您使用的是未初始化的數組。

這是一個演示程序,展示了如何編寫代碼

#include <iostream>
#include <utility>

int main() 
{
    const size_t N = 3;
    int a[N][N];

    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < N; j++ )
        {
            a[i][j] = i * N + j;
        }
    }

    for ( const auto &row : a )
    {
        for ( const auto &item : row )
        {
            std::cout << item << ' ';
        }
        std::cout << '\n';
    }

    std::cout << '\n';

    for ( size_t i = 0; i < N; i++ )
    {
        std::swap( a[0][i], a[i][0] );
    }

    for ( const auto &row : a )
    {
        for ( const auto &item : row )
        {
            std::cout << item << ' ';
        }
        std::cout << '\n';
    }

    std::cout << '\n';

    return 0;
}

它的 output 是

0 1 2 
3 4 5 
6 7 8 

0 3 6 
1 4 5 
2 7 8 

如果你想寫你自己的交換 function 然后像這樣寫

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

並在程序中使用它

::swap( &a[0][i], &a[i][0] );

據我了解您的代碼。 您正在嘗試將第一行元素與其第一列中的相應元素交換。您在矩陣中的 position a[0][0] 處得到 0。 原因很簡單。看看你代碼中的這個步驟 *b=*a-*b; *a=*a-*b; 您從該值中減去相同的值。顯然結果將為 0。是的,將行與列交換的想法非常有創意

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM