パラメータとして定義unsigned long *grid[framebufferheight][framebufferwidth]
、grid
IS NOT
へのポインタの配列のframebufferheight
配列、IT ISframebufferwidth
unsigned long
へのポインターの配列へのframebufferwidth
ポインターunsigned long
。
これは、C では配列全体がパラメーターとして渡されることがないためです。配列が渡される代わりに、構文やそうでないものに関係なく、最初の要素へのポインターが渡されます。私が言ったこととそうgrid
でないことをもう一度見てください。それが本質です。
現在、*( *(grid + y) + x)
または同等に、grid[y][x]
へのポインターに解決されますunsigned long
。
ポインターに整数を代入することは、あなたが望むものではありません。
おそらく、grid
次のようにパラメーターを再定義する必要があります。
unsigned long grid[framebufferheight][framebufferwidth]
またはこれと同等の方法:
unsigned long (*grid)[framebufferwidth]
そのため、1 つへのポインターではなくgrid[y][x]
解決されます。unsigned long
関数外のフレーム バッファは、静的に割り当てることができます。
// 2-d array of unsigned longs
unsigned long grid[framebufferheight][framebufferwidth];
または動的に:
// pointer to an array of framebufferwidth unsigned longs
unsigned long (*grid)[framebufferwidth] = malloc(sizeof(unsigned long) * framebufferheight * framebufferwidth);
intensifyPixel()
そのまま:に渡しintensifyPixel(..., grid, ...)
、同じ方法でアクセスします。grid[y][x] = something;
更新: 説明しようとしても、まだ正しく理解できない場合、または何かを忘れている場合は、より完全な例を参照してください。
#include <stdio.h>
#include <stdlib.h>
#define framebufferheight 20
#define framebufferwidth 64
void visualize(unsigned long (*grid)[framebufferwidth])
{
int y, x;
for (y = 0; y < framebufferheight; y++)
{
for (x = 0; x < framebufferwidth; x++)
printf("%c", (char)grid[y][x]);
printf("\n");
}
}
void drawBox(unsigned long (*grid)[framebufferwidth],
int x1, int y1, int x2, int y2, char c)
{
int y, x;
for (y = y1; y <= y2 ; y++)
for (x = x1; x <= x2; x++)
grid[y][x] = c;
}
void clear(unsigned long (*grid)[framebufferwidth], char c)
{
drawBox(grid, 0, 0, framebufferwidth - 1, framebufferheight - 1, c);
}
int main(void)
{
{
unsigned long (*grid)[framebufferwidth] = malloc(sizeof(unsigned long) * framebufferheight * framebufferwidth);
clear(grid, '.');
drawBox(grid, 1, 1, 10, 5, '1');
drawBox(grid, 40, 10, 55, 18, '2');
grid[framebufferheight / 2][framebufferwidth / 2] = '+';
visualize(grid);
}
{
unsigned long grid[framebufferheight][framebufferwidth];
clear(grid, ',');
drawBox(grid, 1, 1, 10, 5, 'a');
drawBox(grid, 40, 10, 55, 18, 'b');
grid[framebufferheight / 2][framebufferwidth / 2] = '*';
visualize(grid);
}
return 0;
}
出力 ( ideone ):
................................................................
.1111111111.....................................................
.1111111111.....................................................
.1111111111.....................................................
.1111111111.....................................................
.1111111111.....................................................
................................................................
................................................................
................................................................
................................................................
................................+.......2222222222222222........
........................................2222222222222222........
........................................2222222222222222........
........................................2222222222222222........
........................................2222222222222222........
........................................2222222222222222........
........................................2222222222222222........
........................................2222222222222222........
........................................2222222222222222........
................................................................
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,aaaaaaaaaa,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,aaaaaaaaaa,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,aaaaaaaaaa,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,aaaaaaaaaa,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,aaaaaaaaaa,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,bbbbbbbbbbbbbbbb,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bbbbbbbbbbbbbbbb,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bbbbbbbbbbbbbbbb,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bbbbbbbbbbbbbbbb,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bbbbbbbbbbbbbbbb,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bbbbbbbbbbbbbbbb,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bbbbbbbbbbbbbbbb,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bbbbbbbbbbbbbbbb,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bbbbbbbbbbbbbbbb,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,