Bonjour,

Une question qui a sans doute été posée de nombreuses fois, mais je n'ai pas trouvé la réponse.

Dans le code suivant :

double (*a)[2] = malloc(2*L*sizeof(double));

a est un pointeur sur un tableau de double, qui pointe sur un espace mémoire alloué par malloc où il y a la place pour 2*L doubles (ou encore L tableau de 2 double...).

Ce que je ne comprends pas, c'est la manière dont on accède aux éléments.
On écrit : a[i][j], pour accéder à l'élément (i,j)
Mais quand on écrit a[i][j], ce que je comprends c'est que a[i] est un pointeur et on regarde ce qui est pointé j cases mémoire plus loin pour avoir
a[i][j] (soit *(j + a[i]) ). Cependant, le malloc n'a pas alloué de place pour des pointeurs intermédiaires a[i]... Alors je ne comprends pas.

Est ce que cette manière de procéder est 'légale' est C, ou bien s'agit-il d'un 'abus de langage' qui est toléré?

J'espère que je n'ai pas endormi les courageux qui auront lu le post jusqu'au bout.

Merci