Объявление глобальной переменной (массива) внутри функции в C - PullRequest
2 голосов
/ 22 июля 2011

Мне нужно объявить глобальный двумерный массив в C.

Размер массива определяется шириной и высотой заданного изображения.

Так что мне сначала нужно загрузить картинку, а только потом создать массив. Но если я хочу, чтобы переменная (в данном случае мой массив) была глобальной, я должен объявить ее в верхней части файла, а не внутри функции.

Итак, как я могу объявить массив как глобальный, когда я знаю его размер только после выполнения функции main ()?

EDIT: (Я также пробовал другие решения, так что этот комментарий относится ко всем из них) @Mimisbrunnr Во-первых, спасибо за быстрый ответ!

Я пытался, но не вижу, чтобы это сработало. Я, наверное, упускаю что-то глупое, но как «массив» становится глобальным? В test () говорится, что массив не определен </p> <pre><code>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]); }

Ответы [ 3 ]

3 голосов
/ 22 июля 2011

создайте глобальный указатель и затем поместите в него пространство.

char * buffer;

int main(void) {

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

}
1 голос
/ 22 июля 2011

Я на самом деле не выполнял этот код, но это должно помочь вам начать.

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);

Ларсман сделал хорошую мысль.

как насчет этого?

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];

Похоже, вам может понадобиться базовый учебник по Си.

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]);
}
0 голосов
/ 22 июля 2011

используйте переменную static (указатель) и выделите массив динамически, используя malloc.

...