Pointeurs et tableaux 2D en C
Résolu
jcl571
-
jcl571 Messages postés 36 Date d'inscription Statut Membre Dernière intervention -
jcl571 Messages postés 36 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je sais que l'équivalent en pointeur d'un tableau en 1 dimension donne quelque chose comme ça:
&tab[i] = tab
car tab seul est un pointeur sur le premier élément du tableau.
J'ai fait des test sur des tableaux en 2 dimensions et j'en ai conclu que l'équivalent de:
&tab[i][j] n'est pas tab
Je voudrais donc savoir quel est l'équivalent pour un tableau à 2 dimensions?
La raison est que je voudrais passer mon tableau 2D à une fonction et, question de simplifier l'écriture lorsque j'appellerai la fonction(car toujours écrire &tab[i][j] c'est moins pratique que juste écrire tab)(et sauver de la mémoire, tant qu'a y etre!), je voudrais simplement passer un pointeur qui pointe sur le premier élément.
Merci, j'espere que j'ai été assez clair :P
Je sais que l'équivalent en pointeur d'un tableau en 1 dimension donne quelque chose comme ça:
&tab[i] = tab
car tab seul est un pointeur sur le premier élément du tableau.
J'ai fait des test sur des tableaux en 2 dimensions et j'en ai conclu que l'équivalent de:
&tab[i][j] n'est pas tab
Je voudrais donc savoir quel est l'équivalent pour un tableau à 2 dimensions?
La raison est que je voudrais passer mon tableau 2D à une fonction et, question de simplifier l'écriture lorsque j'appellerai la fonction(car toujours écrire &tab[i][j] c'est moins pratique que juste écrire tab)(et sauver de la mémoire, tant qu'a y etre!), je voudrais simplement passer un pointeur qui pointe sur le premier élément.
Merci, j'espere que j'ai été assez clair :P
A voir également:
- Pointeurs et tableaux 2D en C
- Logiciel plan 2d gratuit - Télécharger - Architecture & Déco
- Tableaux croisés dynamiques - Guide
- Mise en forme tableau word - Guide
- Fusionner deux tableaux excel - Guide
- 34 2d 3f 3d 31 - Guide
4 réponses
Je corrige :
&tab[0] = tab
tab[0] est le premier élément et & est l'opérateur d'adresse.
Pour un tableau à deux dimension ça marche pareil,
&tab[0][0] = tab
Tu peux donc passer juste tab à ta fonction.
Il faut par contre que le prototype de la fonction (sa définition) soit correcte.
&tab[0] = tab
tab[0] est le premier élément et & est l'opérateur d'adresse.
Pour un tableau à deux dimension ça marche pareil,
&tab[0][0] = tab
Tu peux donc passer juste tab à ta fonction.
Il faut par contre que le prototype de la fonction (sa définition) soit correcte.
Un exemple :
void zero(int **t)
{
int i,j;
for(i=0; i<2; i++)
for(j=0; j<3; j++)
t[i][j]=0;
};
void main()
{
int tab[2][3];
zero(tab);
};
Je l'ai pas compilé mais bon ça devrait être ok.
void zero(int **t)
{
int i,j;
for(i=0; i<2; i++)
for(j=0; j<3; j++)
t[i][j]=0;
};
void main()
{
int tab[2][3];
zero(tab);
};
Je l'ai pas compilé mais bon ça devrait être ok.
Tu as parfaitement raison pour ce qui est de &tab[0] = tab et non &tab[i], merci de la correction :)
Et j'avais fait un mauvais test pour vérifier l'équivalent, &tab[0][0] est bien équivalent a tab. Je l'avais bien deviné mais j'avais bloqué pour passer le tableau à une fonction, car j'obtiens les 2 warning suivants(ces warning sont obtenus avec la fonction test que tu m'a donnée, mais j'obtiens les même avec mes fonctions):
warning C4047: 'function' : 'int ** ' differs in levels of indirection from 'int [2][3]'
warning C4024: 'zero' : different types for formal and actual parameter 1
Est-ce qu'il y a moyen de ne pas avoir ces warning?(ça marche quand même, mais ça m'irrite d'avoir des warning :P)
Et j'avais fait un mauvais test pour vérifier l'équivalent, &tab[0][0] est bien équivalent a tab. Je l'avais bien deviné mais j'avais bloqué pour passer le tableau à une fonction, car j'obtiens les 2 warning suivants(ces warning sont obtenus avec la fonction test que tu m'a donnée, mais j'obtiens les même avec mes fonctions):
warning C4047: 'function' : 'int ** ' differs in levels of indirection from 'int [2][3]'
warning C4024: 'zero' : different types for formal and actual parameter 1
Est-ce qu'il y a moyen de ne pas avoir ces warning?(ça marche quand même, mais ça m'irrite d'avoir des warning :P)