Question: I thought addresses are 4 bytes big, why is this address 6 bytes?

Im compiling with gcc on a virtual machine with Ubuntu 20.04 and I got an x64 processor if this matters.

```
#include <stdio.h>

int main() {

        char char_array[3] = {'a', 'b', 'c'};
        printf("Address of char_array: %p\n", char_array);
}

```

```
$ gcc -g test.c
$ ./a.out
Address of char_array: 0x7ffc0ff83645

```

Answer: 
First of all C pointers are oftentimes either 4-byte (32-bit) or 8-byte (64-bit) but this is not guaranteed and should not be assumed.

Secondly you can’t count the digits in a hexadecimal memory address and assume that the number of digits divided by two is the number of bytes the system uses for a pointer, because leading zeroes are not being printed. For instance if your memory address was `0x00000020` and you passed it to `printf()` with the `%p` specifier, you would get an output of `0x20`.

If you want to know the byte width of a `char*` in your system you should try `printf(“%zd\n”,sizeof(char*));`
The virtual address space on x64 is 48 bits (6 bytes) long.

<https://en.wikipedia.org/wiki/64-bit_computing>