Problème notation pointeur langage C

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 :

#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;
}

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:

int i=0;
int $j=i;

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

Mais si :

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.