Encore une question : si on envoie ce tableau en argument à une fonction quelle est la syntaxe exacte pour modifier une valeur d’un élément d’une case ?
par exemple est-ce que tableau [ i ] [ y ] . element = valeur ; est correct ?
et est-ce que on peut faire des test sur ces valeurs (par exemple dans un if) et est-ce que la syntaxe est la même ?
Tiens et si je postais une peu sur ce forum aussi :ane:
Les tableaux 2D en C se font en effet avec un malloc puis une boucle de mallocs sur le tableau 1D de pointeurs.
Mais mais mais si il a une chose à savoir :
malloc te donne un bloc de mémoire continu donc les caches de nos proc actuels se régalent et donc c´est bcp bcp plus rapide de parcourir tout un tableau 2D “dans les sens des blocs alloués”.
Prends un tableau 1000 par 1000 rempli de 1 et somme le en bouclant sur i puis sur j et refais le en bouclqnt sur j puis sur i…tu vas vori la différence (c’est énorme).
Bref, il faut toujours construire son tableau en pensant au sens de parcours le plus courant dans la suite du code.
Encore mieux, si tu trouves que c’est lourd de construire un tableau NM avec tous ces mallocs ben fais un tableau 1D à NM en mettant toutes les lignes (ou les colonnes) bout à bout. L’accès à l’élément (i,j) se fait alors par T[i+M*j]. La encore le choix de l’ordre des indices à une influence énormes sur les perfs
Et quand on veut tous les éléments, on fait une seule boucle de 0 à M*N-1
Bref, c´est à se demander à quoi servent les tableaux ND N>1 C ?
Est ce que A[i][j] est plus rapide que A[i+M*j] ? J’en doute si on utilise un bon compilo.