All pointers point to the first byte of whatever it is they're pointing to.
A picture of some memory, with an integer and a pointer.
Code:
+-----+
1000 | 2A | int var = 42
+-----+ Declares an integer, which takes 4 bytes of memory, and contains the value 42
1001 | 00 |
+-----+
1002 | 00 |
+-----+
1003 | 00 |
+-----+
1004 | E8 | int *ptr = &var
+-----+ Declares a pointer, which takes 4 bytes of memory, and contains the value 1000 (0x03E8)
1005 | 03 | That being the first byte of where the integer is stored.
+-----+
1006 | 00 |
+-----+
1007 | 00 |
+-----+
Whenever you use *ptr in your code, the compiler knows that the singular address 1000 is just the first byte of a 4-byte quantity that is an entire integer.
Now with malloc.
Code:
+-----+
1004 | 34 | int *ptr = malloc(sizeof(int))
+-----+ Declares a pointer, which takes 4 bytes of memory, and contains the value 0x1234
1005 | 12 | as the result of calling malloc.
+-----+ The memory at 0x1234 through to 0x1237 (a total of 4 bytes) is the space
1006 | 00 | used to store one integer.
+-----+
1007 | 00 |
+-----+