Массив массивов в c - PullRequest
       4

Массив массивов в c

0 голосов
/ 29 августа 2011

Можно ли создать массив массивов в c

Спасибо.

Ответы [ 4 ]

1 голос
/ 29 августа 2011

Если вам нужен массив массивов, вам следует использовать структуры.

typedef ArrayStruct* ArrayStructPtr;

struct ArrayStruct
    {
void* array;//Node array
ArrayStructPtr arrays;//Pointer to sub arrays
};
int main()
{
ArrayStruct* a;//Declare Some Arrays
a=(ArrayStruct*)malloc(sizeof(ArrayStruct)*N);
for(int i=0;i<N;i++)
{
a[i].array=(void*)malloc(sizeof(int)*N);//Malloc the actual array
a[i].arrays=NULL;//Malloc subarrays if needed
}
//add subarray on array 0
ArrayStruck * temp=(ArrayStruct*)malloc(sizeof(ArrayStruct));
temp->array=(void*)malloc(sizeof(char)*MAXNAME*N);
temp->arrays=NULL;
a[0]=arrays=temp;
return 0;
}

Вам нужен список массивов, где каждый узел структуры может содержать массив и указатель на другой узел.Тип массива void * для поддержки int, float, char *.

Таким образом, каждый массив может иметь столько подмассивов, сколько вы хотите. Вы можете создать 3 массива измерений, если хотите!

1 голос
/ 29 августа 2011

Бьюсь об заклад, вы имеете в виду многомерный массив вместо «массив массивов».

Некоторые ссылки по этой теме:

1 голос
/ 29 августа 2011

Для использования массива массивов со всей мощью C вы должны иметь некоторые знания о динамической обработке памяти в c, с функциями malloc, realloc и free, а также некоторые знания об указателях. Для этого примера, который вы спрашиваете, возможное решение будет следующим:

#include <stdio.h>
void main(int argc, char* argv[]){

    int** myArray; /* This would be a double pointer, because you want a two dimension array.*/
    int firstDimension = 10;
    int secondDimension = 20;
    int i;

    myArray = (int**)malloc(firstDimension*sizeof(int*)); This way you initialize the first dimension of the array.

    for(i = 0; i < firstDimension; i++){
        myArray[i] = (int*)malloc(secondDimension*sizeof(int));
    }

    /*Once you have the array initialized, you can access in the way myArray[i][j];*/

   /*For releasing resources */
    for(i = 0; i < firstDimension; i++){
        free(myArray[i]);
    }
    free(myArray);
}

Это динамический путь, который преподается на курсах CS.

1 голос
/ 29 августа 2011

Это так же, как, например, в PHP:

int arrayInArray[10][50];

Вы читаете из него данные с помощью:

printf("%d", arrayInArray[3][37]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...