Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do arrays work inside a struct?

If I have for example

typedef struct node
{
    int numbers[5];
} node;

Whenever I create an instance of such a struct there's gonna be allocation of memory in the stack for the array itself, (in our case 20 bytes for 5 ints(considering ints as 32 bits)), and numbers is gonna be a pointer to the first byte of that buffer. So, I thought that since inside an instance of node, there's gonna be a 20 bytes buffer(for the 5 ints) and a 4 bytes pointer(numbers), sizeof(node) should be 24 bytes. But when I actually print it out is says 20 bytes.
Why is this happening? Why is the pointer to the array not taken into account?
I shall be very grateful for any response.

like image 219
Root149 Avatar asked Dec 05 '25 10:12

Root149


2 Answers

Arrays are not pointers:


  • int arr[10]:

    • Amount of memory used is sizeof(int)*10 bytes

    • The values of arr and &arr are necessarily identical

    • arr points to a valid memory address, but cannot be set to point to another memory address


  • int* ptr = malloc(sizeof(int)*10):

    • Amount of memory used is sizeof(int*) + sizeof(int)*10 bytes

    • The values of ptr and &ptr are not necessarily identical (in fact, they are mostly different)

    • ptr can be set to point to both valid and invalid memory addresses, as many times as you will

like image 86
barak manos Avatar answered Dec 07 '25 09:12

barak manos


There is no pointer, just an array. Therefore the struct is of size sizeof( int[5] ) ( plus possible padding ).

The struct node and its member numbersshare the address. If you have a variable of type node or a pointer to that variable, you can access its member.

like image 35
2501 Avatar answered Dec 07 '25 10:12

2501



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!