0

わかりましたので、反転して印刷する必要がある 10x10 の配列があります。私はまさにそれを行うためにこの関数を作りました

void flip(int d[][10], int rows)
{
    int temp, x, y, cols;

    cols=rows;

    for(x=0; x<rows; x++)
    {
        for(y=0; y<cols; y++)
        {
            temp=d[x][y];
            d[x][y]=d[y][x];
            d[y][x]=temp
        }
    }
}

これで、配列が参照によって渡されることがわかりましたが、配列自体がポインターとして機能することをどこかで読んだので、正しいと思われるポインター表記を使用する必要はありません。私の問題は、反転後に印刷しようとすると、反転された配列が印刷されず、元の配列が反転していないと思われる元の配列が印刷されることです。

印刷機能はこちら。

void printArray(int d[][10])
{
    int rows, cols,x,y;

    rows = sizeof(d[0])/sizeof(d[0][0]);

        cols = rows;

    for(x=0;x<rows; x++)
    {
        for(y=0;y<cols;y++)
            printf("%2d ",d[x][y]);
        printf("\n");
    }   
}

奇妙なことに、temp を 10 のような「ハード」な値に変更すると、半分が 10 の 10x10 配列が出力されます。ここで、単純なスワッピングが機能しない理由がわかりません:(

4

1 に答える 1

2

私が知る限り、「反転」とは「転置」を意味します...

また、手でコードを作成すると、コードは機能しますが、元の行列が 2 回取得されます。内側の for ループをx0 ではなく で開始するように変更してみてください。

于 2013-06-29T03:25:52.243 に答える