[C] Pointeur en argument de fonction

Résolu/Fermé
kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Non membre Dernière intervention 5 février 2025 - 5 mars 2005 à 13:35
kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Non membre Dernière intervention 5 février 2025 - 5 mars 2005 à 14:09
Bonjour,

En fait j'ai un ptit problème. J'ai un tableau d'entiers et une fonction dont le second argument est un pointeur sensé reccueillir l'adresse du tableau.

Mais gcc me renvoie cette erreur lors de la compilation:
passage de l'argument n°2 de « print_pointeur_tab » d'untype pointeur incompatible


Voici mon code:
#include <stdio.h>

#define TWEN 20


int main(void)
{
	
	unsigned short int tab[TWEN]={1,5,7,65,45,74,85,4,2,6,4,5,1,45,89,41,75,74,2};
	
	int i;
	
	printf("Votre tableau est constitué des éléments suivant:\n");
	for (i=0;i<21;i++)
	{
		printf("%d ",tab[i]);
	}
	
	printf ("\n\n%d",tab);
	
	
	// *ptab est un long int car l'adresse de tab ressemble souvent à -1073743776
	void print_pointeur_tab(unsigned short champs,long int *ptab)
	{
		while (*ptab<champs)
		{
			printf("\n%d\n",*ptab++);
			
		}
		
		
	}		
	
        // C'est ici qu'il ya l'erreur dont je parle au dessus
	print_pointeur_tab(TWEN,tab);
	
	
	return 0;
}


En gros c'est un programme qui est sensé afficher deux fois le contenu d'un tableau. Une fois en utilisant le nom de sa variable, et une autre fois en utilisant un pointeur...

Je ne vois pas en quoi c'est un type pointeur incompatible....

Merci d'avance...

1 réponse

kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Non membre Dernière intervention 5 février 2025 1 526
5 mars 2005 à 14:09
Ah d'accord, un pointeur ne doit pas être du type de l'adresse, mais du même type que la variable à laquelle il fait référence...
Donc j'ai changé le type de *ptab en unsigned short int.

Ensuite le coup du while(*ptab<20) est à remplacer par un compteur avec for sans utiliser *ptab... Normal ça ne fait pas référence à l'indice du tableau en cours mais à la valeur à laquelle *ptab fait référence...

Pff c'est compliqué les pounteurs :-(

Voilà ce que ça donne maintenant:
#include <stdio.h>

#define TWEN 20


int main(void)
{
	
	unsigned short int tab[TWEN]={1,5,7,65,45,74,85,4,2,6,4,5,1,45,89,41,75,74,2};
	
	int i;
	
	printf("Votre tableau est constitué des éléments suivant:\n");
	for (i=0;i<21;i++)
	{
		printf("%d ",tab[i]);
	}
	
	
	
	void print_pointeur_tab(unsigned short int champs,unsigned short int *ptab)
	{	
		
		for (i=0;i<champs+1;i++)
		{
			printf("\n%d\n",*ptab++);
		}	
		
		
	}		
	
	print_pointeur_tab(TWEN,tab);
	
	
	return 0;
}	


Désolé pour le dérangement...
0