Rechercher : dans
Par :

[C] Pointeur en argument de fonction

Dernière réponse le 5 mar 2005 à 14:09:19 kilian, le 5 mar 2005 à 13:35:41 
 Signaler ce message aux modérateurs

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...
Configuration: Debian Sarge

Meilleures réponses pour « [C] Pointeur en argument de fonction » dans :
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Les inlines en C++ VoirSignification Exemple 1 Inline et headers Exemple 2 Signification Le mot-clé inline est utilisé en C++ et s'applique à une fonction. Il indique au compilateur que chaque appel à la fonction inline devra être remplacé par le corps de cette...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

 kilian, le 5 mar 2005 à 14:09:19

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...

Répondre à kilian