2017-04-12 6 views
0

ポインタ/アドレッシングメソッドを使用して連続する数値が列の下に来るように行列をロードしようとしています。現在、私のプログラムは連続した数字を行全体に表示します。あなたのポイントはload逆の順序で行列にある場合は、あなたのポイントは、列の順序で配列にアクセスするには、ポインタを利用することであれば2次元配列の列メジャーファッションへの変換

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
int i,j; 
int twodArray[5][5], *twodArrayptr; 


int add = 0; 

for(i = 0; i < 5; i++) 
{ 
    for(j = 0; j < 5; j++) 
    { 
     twodArray[i][j]= (i*5) + j; 

    } 

} 

twodArrayptr = &(twodArray[0][0]); 

for(i = 0; i < 5; i++) 
{ 
    for(j = 0; j < 5; j++) 
    { 
     printf("%d ", *(twodArrayptr +((i*5)+j))); 


    } 
    printf(" \n"); 

} 
} 
+0

「列の順序」で**ロードして同じ順序で印刷したいのですか、「行の順序」で読み込んで「列の順序」で印刷したいですか?声明は不明である。異なる順序で出力していない場合は、同じループで// printをロードすることができます。いずれにせよ、両方の状況は以下の回答でカバーされています。 –

答えて

1

は、その後、あなたのソリューションは以下の通りです、4pyのソリューションで行きます。


あなたはあなたの問題は(あなたがiを持っていたjはスワップ)ここで、SO CLOSEました。行/ COL主要な順序から変更するには、行うことができます:

printf (" %2d", *(twodArrayptr + ((j * MAX) + i))); 

をまたmainintを入力しているため、値を返します注意してください。

#include <stdio.h> 

#define MAX 5 

int main (void) 
{ 
    int i, j, twodArray[MAX][MAX] = {{0}}, *twodArrayptr = (int *)twodArray; 

    for (i = 0; i < MAX; i++) { 
     for (j = 0; j < MAX; j++) { 
      twodArray[i][j] = (i * MAX) + j; 
      printf (" %2d", twodArray[i][j]); 
     } 
     putchar ('\n'); 
    } 

    putchar ('\n'); 

    for (i = 0; i < MAX; i++) { 
     for (j = 0; j < MAX; j++) 
      printf (" %2d", *(twodArrayptr + ((j * MAX) + i))); 
     putchar ('\n'); 
    } 

    return 0; 
} 

使用例/出力

$./bin/rowcol2d 
    0 1 2 3 4 
    5 6 7 8 9 
10 11 12 13 14 
15 16 17 18 19 
20 21 22 23 24 

    0 5 10 15 20 
    1 6 11 16 21 
    2 7 12 17 22 
    3 8 13 18 23 
    4 9 14 19 24 

また注:一緒にそれを置く

は、あなたが何か行うことができを、あなたは可変引数関数を使用する必要はありません。printf 1つを出力する文字を使用するputcharの代わりに:)

+0

これは '連続した数値が列の下に来るように行列をロードする 'と言われますが、間違った方法でロードして出力を調整するだけです。 – lU5er

+0

私はそれを誤解しました。その場合、あなたは金星を手に入れます。私はポイントがポインタを使用して行/ colの出力を変更することでしたが。それ以外の場合は、初期化時に 'i'、' j'を変更するだけで、ポインタと単一添字のポイントは何ですか? –

+0

はい!それはかなり不自由だ。私はまた、ポインタについての手掛かりがありません。 – lU5er

0

変更魅力のようなtwodArray[i][j]= (j*5) + i;

作品への割り当てロジック。

for(i = 0; i < 5; i++) 
{ 
    for(j = 0; j < 5; j++) 
    { 
     twodArray[i][j]= (j*5) + i; 

    } 

}