Citation Envoyé par Jacti Voir le message
Un exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* An example of implicit conversion */
#include<stdio.h>
int main()
{
    int x = 10;    // integer x
    char y = 'a';  // character y

    // y implicitly converted to int. ASCII 
    // value of 'a' is 97
    x = x + y;

    // x is implicitly converted to float
    float z = x + 1.0;

    printf("x = %d, z = %f", x, z);
    return 0;
}
La conversion implicite pour additionner un float et un int, c'est assez courant, non ? Saut en Rust ou en Ada ?

C'est vrai que c'est assez tolérant d'additionner des caractères et des entiers... même si c'est assez pratique pour faire des opérations sur des caractères de manière très économe...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
unsigned char a=97;
printf("a comme entier:%d\na comme char:%c",a,a);
-->
a comme entier:97
a comme char:a
Mais c'est une particularité étrange du c bien expliquée dans les cours.

Par contre, les pointeurs de pointeurs, leur arithmétique, le pointeur void... c'est pas très débutant, mais d'un autre côté, on n'est pas obligé d'en mettre dans le 1er cours...

Ce que je trouve dommage en c, c'est qu'ils n'aient pas normalisé les types modernes, comme les tables de hash, divers containers, listes etc., qui du coup se retrouvent implémentées de nombreuses fois de manière différente, ou enrichi les lib standard.