Hey

Im currently trying to learn abit more about C (a start-off) and i do have some questions:

1.)
int a = 10;
void *p;
p = (int *)&a;

p is the (void)pointer
p is casted to int
p gets the adress of a assigned (&a)
> but why do i have to write it this way: (int *)&a and not (int)*(&a)?
> can some1 explain me the syntax of this please?
> would be (int*)&a be the same, without the space between int and *?
> what is int* then?
> is the dereferenc-star * assigned to the int-cast or to the adress here?
here it is used again:
int **matrix;
p = malloc( count * sizeof( int * ) );
size of what? an int-pointer?
the most confusing part is this:
int x = 10;
void *p;
p = (int *)&x;
*(int *)p = 100;
wtf... maybe ill get it someday

2.) do i have to write numbers with their special letter on the end?
float x = 1.5f; or is float x = 1.5; the same?
same with long, hex etc..