Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How do I fill and struct within struct?

I am tryng to fill and struct within struct with array. Is there any way I can do it? I tried loops and simply just putting array instead of hard numbers but no luck. Here code:

typedef struct
{
    int *tokens;
    char *name;
    int numTokens;
    int index;
} Pile;

typedef struct
{
    Pile N;
    Pile W;
    Pile E;
    Pile S;
} Game;

int main(void)
{
    //tokens
    int north[MAX_TOKENS], west[MAX_TOKENS], east[MAX_TOKENS], south[MAX_TOKENS];
    // sizes of token value fields
    int north_size = 0, west_size = 0, east_size = 0, south_size = 0;
    int check = read_tokens(north, west, east, south, &north_size, &west_size, &east_size, &south_size);
    //I read them and then store backwards.
    int *arrays[4] = {north, west, east, south};
    int sizes[4] = {north_size, west_size, east_size, south_size};
    store_values_backwards(arrays, sizes);
    //Then I need to send arrays with the numbers I read into this
        Pile N = {(int[]){*north}, "N", north_size, 0};
        Pile W = {(int[]){*west}, "W", west_size, 0};
        Pile E = {(int[]){*east}, "E", east_size, 0};
        Pile S = {(int[]){*south}, "S", south_size, 0};

Instead of hard coded numbers like:

  Pile N = {(int[]){-66, -52, 109}, "N", 3, 0};
  Pile W = {(int[]){78}, "W", 1, 0};
  Pile E = {(int[]){118,146,46,77}, "E", 4, 0};
  Pile S = {(int[]){67,159,-13}, "S", 3, 0};

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

The first member of the struct is a pointer to int (int *tokens;) and you want to initialize it using an array of ints.

Then

Pile N = {&north[0], "N", north_size, 0};

or simply

Pile N = {north, "N", north_size, 0};

should work.

Take a look to the C-FAQ:

A reference to an object of type array-of-T which appears in an
expression decays (with three exceptions) into a pointer to its first
element; the type of the resultant pointer is pointer-to-T.

That is, whenever an array appears in an expression, the compiler
implicitly generates a pointer to the array’s first element, just as
if the programmer had written &a[0]. (The exceptions are when the
array is the operand of a sizeof or & operator, or is a string literal
initializer for a character array.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading