Anil
Anil

Reputation: 1788

Size of Next pointer in linked list?

Hello All given a node of linked list as,

struct node
{
int data;
struct node* next;
};

Consider int with 4 bytes.What will be the size of pointer next?

And also i have the following ,

void * ptr;
printf("%d",sizeof(ptr));

Size of pointer is 8 bytes.

I am getting the sizeof(struct node) as 12,how is the size of next pointer's size in the given struct node is 12.Please help me to understand. Thank You in advance.

Upvotes: 1

Views: 2213

Answers (4)

user1952500
user1952500

Reputation: 6771

Size of a pointer is the number of bytes needed to store the address:

printf("%zu",sizeof(ptr));
printf("%zu",sizeof(struct node *));
printf("%zu",sizeof &abc);

Each of the above should return 8 on a machine with 64-bit addresses and 4 on a machine with 32-bit addresses.

Size of a node can be obtained by dereferencing the pointer:

struct node abc;
void *ptr = &abc;
printf("%zu",sizeof(*((struct node *)ptr)));

The above should return 12 on a machine with 64-bit addresses, as mentioned above.

Upvotes: 1

chux
chux

Reputation: 153348

What will be the size of pointer next?

The size is sizeof(struct node*)


Code should not be written to depend on a particular result.

The result could be 4 or 8, or 1 or 16 or others.

Writing portable C code relies on not know precisely the answer other than is is of some sane range like 1 to 64.

OP has not mentioned the reason for needing to know value of the size of sizeof(ptr), but the answer is simply the size of a pointer is sizeof(ptr). Code should use sizeof(ptr) rather than a magic number like 4 or 8.


To print the size of a pointer, use

some_type* ptr;
// printf("%d",sizeof(ptr));
printf("%zu",sizeof(ptr));

z Specifies that a following d, i, o, u, x, or X conversion specifier applies to a size_t C11dr §7.21.6.1 7

The size of a pointer like int *, const int *, void *, int (*)() may differ. Portable code does not assume all pointers to various types are of the same size.

Upvotes: 1

Fantastic Mr Fox
Fantastic Mr Fox

Reputation: 33864

sizeof(pointer) is a constant regardless of the plain old data type it points to on most common, modern systems. Since you did:

sizeof(ptr)

and got 8 bytes i would hazard a guess that you are on a 64bit system. This indicates to me that your sizeof(struct node) will be 12 bytes because you have the following:

struct node {
    int data; // 4 Bytes (32 bit, a common size for `int`s)
    struct node* next; // 8 Bytes, as are all pointers on your system
}; // total size of 12 bytes.

Upvotes: 1

Wyzard
Wyzard

Reputation: 34563

On typical systems, the size of a pointer is independent of the size of the data it points to. On a 32-bit system, pointers are 32 bits (4 bytes), and on a 64-bit system, pointers are 64 bits (8 bytes).

Your structure is 12 bytes presumably because it holds a 4-byte int and an 8-byte pointer. However, this is platform-specific and can vary. Many systems require values to be aligned to a whole multiple of their size — that is, a 64-bit pointer must begin at an address that's a multiple of 8 bytes. Compilers will insert padding between structure members to meet alignment requirements.

On my x86-64 Linux system, the size of your structure is 16 bytes: 4 bytes for the int, 4 bytes of padding to reach an 8-byte boundary, and 8 bytes for the pointer.

Upvotes: 2

Related Questions