0

20 x 20 の配列があり、4 x 4 の配列を読み取って反復する必要があります。指摘された代入でこれができると思ったが、強制終了以外はあまり機能しない

const char SOURCE[20][20];
const char **pointer;

for(int x = 0; x < 20; x+=4)
{
    for(int y = 0; y < 20; y+=4)
    {
        pointer = (const char **)&SOURCE[x][y];
        printGrid(pointer);
    }
}

void printGrid(const char **grid)
{
    // do something usefull
}
4

4 に答える 4

2

ポインターを別の型にキャストするだけでは、それが指している型は変わりません (そして、自分が何をしているのか本当にわかっていない限り、通常は未定義の動作につながります)。を変更できない場合はprintGrid、その場でポインターの配列を作成する必要があります。

for ( int x = 0; x < 20; x += 4 ) {
    for ( int y = 0; y < 20; y += 4 ) {
        char const* p4[4] =
        {
            source[x] + y,
            source[x + 1] + y,
            source[x + 2] + y,
            source[x + 3] + y
        };
        printGrid( p4 );
    }
}
于 2013-08-19T15:21:47.083 に答える
0

2D 配列のタイプは次のcharとおりです。

const char SOURCE[20][20];

それを繰り返し処理しているときは、 をchar参照するか、 でアドレスを参照できchar*ます。

for(int x = 0; x < 20; x+=4)
{
    for(int y = 0; y < 20; y+=4)
    {
        printGrid(SOURCE[x][y]); // do this unless you need to do something with pointer
    }
}

printGrid次に、次の署名のいずれかで作成できます。

void printGrid(const char& grid)
{
    // do something usefull
}

また

void printGrid(const char* grid)
{
    // do something usefull
}
于 2013-08-19T14:14:44.363 に答える
0

James の Answer を拡張するとchar、単にchar.

for(int x = 0; x < 20; x+=4)
{
    for(int y = 0; y < 20; y+=4)
    {
        char const (*p4[4])[4] =
        {
            (const char(*)[4])(SOURCE[x] + y),
            (const char(*)[4])(SOURCE[x + 1] + y),
            (const char(*)[4])(SOURCE[x + 2] + y),
            (const char(*)[4])(SOURCE[x + 3] + y)
        };
    }
}
于 2013-08-19T14:45:22.753 に答える