3

Cでグローバル2次元配列を宣言する必要があります。

配列のサイズは、特定の画像の幅と高さによって決まります。

したがって、最初に画像をロードしてから、配列を作成する必要があります。ただし、変数(この場合は配列)をグローバルにする場合は、関数内ではなくファイルの先頭で宣言する必要があります。

では、main()関数の実行後にのみ配列のサイズがわかっている場合、配列をグローバルとして宣言するにはどうすればよいですか?

編集:(私は他の解決策も試したので、このコメントはそれらすべてを参照しています)@Mimisbrunnrまず、迅速な対応に感謝します!

試しましたが、うまくいくかわかりません。私はおそらく愚かな何かを見逃していますが、「配列」はどのようにしてグローバルになりますか?test()で、「配列」は宣言されていないと表示されます

int *buffer;

int main() {
    int i;
    int x_size=100;
    int y_size=100;

    int * buffer = malloc(sizeof(int)*x_size*y_size);
    int ** array = malloc(sizeof(int*)*y_size);

    for(i = 0; i<y_size; i++) {
        array[i]=&buffer[i*x_size];
    }

    array[0][1] = 5;
    test();
    return 0;
}

void test(){
    printf("%d",array[0][1]);
}

4

3 に答える 3

4

グローバルポインタを作成し、その中にスペースをmallocします。

char * buffer;

int main(void) {

    buffer = malloc( /* Width * Height */ );

}
于 2011-07-22T15:25:20.113 に答える
1

私は実際にこのコードを実行しませんでしたが、これで始めることができます。

int x_size = 100;
int y_size = 100;

int ** array;
array = malloc(sizeof(int *)*y_size);
for(int i = 0; i<y_size; i++)
array[i] = malloc(sizeof(int)*x_size);

larsmansは良い点を述べました。

これはどうですか?

int x_size = 100;
int y_size = 100;

int * buffer = malloc(sizeof(int)*x_size*y_size);

int ** array = malloc(sizeof(int *)*y_size);
for(int i = 0; i<y_size; i++)
array[i] = &buffer[i*x_size];

基本的なCチュートリアルが必要なようです。

int *buffer;
int **array;
int main()
{
int x_size=100;
int y_size=100;
int i;
/*int * */ buffer = malloc(sizeof(int)*x_size*y_size);
/*int ** */ array = malloc(sizeof(int*)*y_size);
for(i = 0; i<y_size; i++)
 array[i]=&buffer[i*x_size];
array[0][1] = 5;
test();
return 0;
}
void test()
{
printf("%d",array[0][1]);
}
于 2011-07-22T15:29:32.303 に答える
0

変数(ポインター)を使用し、staticを使用して配列を動的に割り当てますmalloc

于 2011-07-22T15:26:27.137 に答える