How to make an array of struct in C?

24,250

Solution 1

To declare an array of struct tiles just place this before the variable as you do with other types. For an array of 10 int

int arr[10];  

Similarly, to declare an array of 256 struct tiles

struct tiles arr[256];  

To access any member, say type, of elements of arr you need . operator as arr[i].type

Solution 2

You need to give your array a name. If an int variable looks like:

int my_int

And an array of ints looks like:

int my_ints[256]

Then an array of struct tiles looks like:

struct tiles my_tiles[256]

Solution 3

An array is a variable, just like an integer, so you need to give it a name to access it.

Note: the array has a lowest index of 0 and a highest index of 255, so the for loop should be: for (i = 0; i < 256; ++i) instead.

int main(void)
{
        unsigned short int i;
        struct tiles t_array[256];

        for (i = 0; i < 256; ++i) {
                t_array[i].type = stuff;
                t_array[i].item = morestuff;
                t_array[i].enty = evenmorestuff;
        }
}
Share:
24,250
sadljkfhalskdjfh
Author by

sadljkfhalskdjfh

Updated on August 25, 2020

Comments

  • sadljkfhalskdjfh
    sadljkfhalskdjfh over 3 years

    I am making a roguelike game. I want to represent the map as an array of structs, for example having 256 structs in an array. The map is a 16*16 grid of tiles, and each tile has attributes, such as whether there is an item on top of it.

    So say that I want an array of 256 of the struct tiles:

    struct tiles {
            char type; /* e.g. dirt, door, wall, etc... */
            char item; /* item on top of it, if any */
            char enty; /* entity on top of it, e.g. player, orc if any */
    }
    

    Then, I need to access an array of that structs something like this:

    int main(void)
    {
            unsigned short int i;
            struct tiles[256];
    
            for (i = 1; i <= 256; i++) {
                    struct tiles[i].type = stuff;
                    struct tiles[i].item = morestuff;
                    struct tiles[i].enty = evenmorestuff;
            }
    }