So I'm learning about C pointers, and I'm a little confused. Pointers just point to specific memory address.
sizeof(char*)
, sizeof(int*)
, sizeof(double*)
all output 8
. So they all take 8
bytes to store a memory address.
However, if I try to compile something like this:
int main(void)
{
char letter = 'A';
int *a = &letter;
printf("letter: %c\n", *a);
}
I get a warning from the compiler (gcc
):
warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
int *a = &letter;
However, char *a = &letter;
, doesn't result in a warning.
Why does the type of the pointer matter, if it's 8
bytes long anyway? Why does declaring a pointer with a type different than the type of data it's pointing to yield in a warning?