Bon je suis totalement débutant en C, j'arrive au chapitre des pointeurs et malgré mes recherches, je ne comprends pas tout

Dans tous les exemples que j'ai lus, quand on veut déclarer un pointeur sur un entier (par exemple), on fait :

et si j'ai bien compris
var est une adresse
*var est le contenu à l'adresse var

C'est ce que me dis tout le monde et tous les bouquins. Pour illustrer cet exemple, je me suis fait un petit prog :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
#include <stdio.h>
 
int main(void) { 
    int* b;
 
    b = 10;
    b++;
 
    printf("Voici les valeurs de a et b : %i", b);
 
    return 0 ;
}
Là, je me suis dit que b ne vaudrait pas 11 au final, et j'ai bien eu raison car 14 (en fait 10 + 4 puisqu'on a décalé le pointeur de 4 octets).

Eh ben, là où je ne comprends pas c'est lorsque je fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
#include <stdio.h>
 
int main(void) { 
    int* b;
 
    *b = 10;
 
    printf("Voici les valeurs de a et b : %i", b);
 
    return 0 ;
}
Le compilateur ne dis rien et compile normalement, et à l'execution, le prog plante en me mettant le contenu des différents registres du processeur. Pourtant les bouquins disent que *b = 10 fonctionne, et bah moi pas et je pige pas...

Merci d'avance