j'ai essayé le code suivantpointeur sur un tableau 2D avec une longueur de ligne incompatible
char arr[5] = {'A', 'E', 'I', 'O', 'U'};
char (*p_arr)[1] = &arr;
printf("%c\n", p_arr[0][4]); //returns 'U'
Pourquoi pas là une erreur, car
char (*p_arr)[1] = &arr;
semble être une initialisation à partir d'un type incompatible (char (*)[5]
au lieu de requis char (*)[1]
)? De plus, p_arr[0][4]
demande le 5ème élément d'un tableau censé avoir seulement 1
élément. N'est-ce pas mal?
Etes-vous sûr que les builds? Les types de 'p_arr' et' & arr' sont différents, cette initialisation ne devrait pas être autorisée. –
Quant à ce que je pense que votre question est, C n'a aucune vérification des limites. –
Par _ "C ne contrôle pas les limites" _ Voulez-vous dire que le compilateur C n'utilise pas les informations '[1]' dans 'char (* p_arr) [1] = &arr;'. Si tel est le cas, n'y a-t-il pas un problème avec l'allocation de mémoire statique de C? –