# Problème notation pointeur langage C

**URL:** <https://www.debian-fr.org/t/probleme-notation-pointeur-langage-c/84446>\
**Category:** Programmation\
**Created:** [Avril 22, 2021, 11:16 UTC](https://www.debian-fr.org/t/probleme-notation-pointeur-langage-c/84446 "2021-04-22T11:16:41Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tartuff](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/839c29/32.png) [@Tartuff](https://www.debian-fr.org/u/Tartuff)\
**Post date:** [Avril 22, 2021, 11:16 UTC](https://www.debian-fr.org/t/probleme-notation-pointeur-langage-c/84446/1 "2021-04-22T11:16:42Z")

</div>

Bonjour,

J’essaye de comprendre les pointeurs.

Pour ce faire j’ai fait le code suivant, c’est à dire un affichage avec la notation entre crochet et la notation pointeur afin de comparer.

Cependant les adresses des valeurs ne correspondent pas donc je suppose qu’il y a une erreur mais je ne vois vraiment pas ou, pouvez vous m’aider ?

J’ai bien la bonne correspondance entre les adresses avec les tableaux de char mais pas avec les matrice de char, le code ci dessous :

```auto
#include <stdio.h>
#include <stdlib.h>

// Soit un tableau de char à 1 dimension
char tableau[2] =
{'A', 'B'};

char matrice[2][3] =
{
	{'A', 'B', 'C'},
	{'D', 'E', 'F'}
};

void affichageTableau(char *tableau)
{
	// Affichage avec la notation entre crochet :
	for (int i = 0; i < 2; i++)
		printf("Le tableau[%d] = %c et a pour adresse : %p\n", i, tableau[i], &tableau[i]);

	printf("\n\n");

	// Affichage avec la notation pointeur :
	for (int i = 0; i < 2; i++)
		printf("Le tableau[%d] = %c et a pour adresse : %p\n", i, *(tableau + i), tableau + i);
}

void affichageMatrice(char (*pMatrice)[2][3])
{
	// Affichage avec la notation entre crochet :
	for (int ligne = 0; ligne < 2; ligne++)
		for (int colonne = 0; colonne < 3; colonne++)
			printf("La matrice[%d][%d] = %c et a pour adresse : %p\n", ligne, colonne, matrice[ligne][colonne], &matrice[ligne][colonne]);

	printf("\n\n");

	// Affichage avec la notation pointeur :
	for (int ligne = 0; ligne < 2; ligne++)
	{
		printf("L'adresse de la ligne : %d = %p\n",ligne + 1, *(pMatrice + ligne));
		// (*pMatrice + ligne) = pointeur sur la ligne i + 1
		

		for (int colonne = 0; colonne < 3; colonne++)
		{
			char *pLigne = *(matrice + ligne);
			printf("La matrice[%d][%d] = %c et à pour adresse : %p\n", ligne, colonne, *(pLigne + colonne), (*(pMatrice + ligne)) + colonne);

		}
	
	}
}

int main(void)
{
  	affichageMatrice(&matrice);
//	affichageTableau(tableau);
	return EXIT_SUCCESS;
}

```

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Avril 24, 2021, 9:00 UTC](https://www.debian-fr.org/t/probleme-notation-pointeur-langage-c/84446/2 "2021-04-24T09:00:29Z")

</div>

Bonjour,

je crois que c’est un problème de passage de variable par valeur ou par pointeur.

En gros tu peux passer ta variable de deux façon:

- ta fonction récupère la valeur de ta variable, et travaille sur cette copie
- ta fonction récupère le pointeur vers ta variable et travaille directement avec la variable elle-même

`&var` est une référence de la variable, une transmission par reference fait que la valeur traitée est celle de la variable de départ.  
Si:

```auto
int i=0;
int $j=i;

```

`j=100;` est équivalent à` i=100;`

Mais si :

```auto
int *i;

```

`i++;` incremente le compteur de pointeur de 1 octet, c’est l’adresse du pointeur qui est modifié et non la valeur de la variable.
