sakjimh
Messages postés13Date d'inscriptionjeudi 9 mars 2006StatutMembreDernière intervention31 décembre 2007
-
7 oct. 2007 à 23:37
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
8 oct. 2007 à 20:30
salut,
j'ai reussit a crée une procedure qui initialise une matrice carrée avec un pointeur **p
void ini_matrice(int **p,int n)
{
int i,j;
p=(int **)malloc(n*sizeof(int*));
for(i=0;i<n;i++)
{
*(p+i)=(int *)malloc(n*sizeof(int));
for(j=0;j<n;j++)
*(*(p+i)+j)=0;
}
}
le probléme c'est que je ne sais pas comment l'appelé dans mon programme principale (passage par variable) je sais comment avec un tableau il suffit de faire:
void main()
{
int tab,dim;
tableau(&tableau,dim);
}
alors trouver moi une solution pour la matrice
merci d'avance;
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 7 oct. 2007 à 23:52
Si c'est ta fonction qui alloue la mémoire, il faudra renvoyer un pointeur de pointeur et faire la fonction qui désalloura tout ça.
J'ai déjà fait un allocateur pour pointeur de pointeurs bien plus simple d'utilisation et beaucoup plus performant:
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 8 oct. 2007 à 15:35
[auteur/DEATHCRASH/3585.aspx DeAtHCrAsH] >> C'est le but aussi. Il n'y aura aucun dégat à procéder ainsi.
"Quel idée de faire du C aussi."
Tu parles d'une remarque. C'est comme si je te disais: qu'elle idée de faire du C++, fait plutôt du C#, t'as même plus besoin de savoir ce qu'est la mémoire.
Attention luthor dans ton code. En C, il n'y a pas de surcharge de fonction.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 8 oct. 2007 à 16:51
SAKingdom> Ca ne te dérange pas de renvoyer un pointeur déclaré et initialisé dans ta fonction ? Perso si je fais du C/C++ c'est pour faire du propre et pas de la dentelle.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 8 oct. 2007 à 17:01
SAKingdom => "Tu parles d'une remarque. C'est comme si je te disais: qu'elle idée de
faire du C++, fait plutôt du C#, t'as même plus besoin de savoir ce
qu'est la mémoire."
=> Le C# n'a rien a voir avec le C++. Alors que le C++ est dans la continuité du C, on trouve exactement les memes mécanismes, sauf qu'on a de l'objet.
SAKingdom => "Attention luthor dans ton code. En C, il n'y a pas de surcharge de fonction."
=> Il ne s'agit pas de faire deux fonctions. Les deux fonctions font la meme chose, c'est juste deux exemples de définition.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 8 oct. 2007 à 17:57
[auteur/DEATHCRASH/3585.aspx DeAtHCrAsH]
>> Je crois que tu ne comprends pas encore très bien les pointeurs. Quand on retourne un pointeur, on retourne l'adresse contenue dans le pointeur et non l'adresse du pointeur. C'est comme faire:
int test (void)
{
int i = 5;
return i;
}
On retourne 5. Et non pas l'adresse de i
char * test (char *i)
{
char *j = i;
return j;
}
On retourne l'adresse contenue dans j et non pas l'adresse de j
luthor >> Ok pour l'exemple.
Oui je sais que C# et C++ ne sont pas la même chose.
Ce que je voulais faire voir par ma remarque c'est la manière dont tu conseille d'utiliser une autre forme de programmation (objet) plutôt que d'utiliser les méthodes de la forme courante (non objet) ce qui, à mon avis, n'a pas de sens.
Dans le contexte, c'est comme dire que C# est mieux parce que l'on a pas à se préoccuper de la mémoire.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 8 oct. 2007 à 19:15
[auteur/SAKINGDOM/617077.aspx SAKingdom]:
Je critique pas les méthodes non objets :) mais j'arrive pas à comprendre pourquoi dans le cas de matrices, on ne l'utilise pas. C'est tellement pratique et bien adapté a mon gout.
matrixi ma_matrice(4, 4, 0); // C'est quand même plus beau ^^
Pour l'histoire des pointeurs, on peut retourner un entier plutot qu'une addresse:
unsigned int allouer_memoire(unsigned int _size)
{
char * memoire = (char*)malloc(_size);
return *(unsigned int*)memoire;
}
int main(...)
{
unsigned int adresse_memoire = allouer_memoire(10);
}
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 8 oct. 2007 à 19:29
Ah ok. Oui c'est plus simple mais bon. Si il veut le faire en C, on peut oublier ça.
Pour ta fonction, oui ça reste correct mais ça va faire un vrai bordel dans le code en plus d'enlever tout l'intéret des pointeurs.
En passent, je ne comprend pas pourquoi tu as posté ça :)
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 8 oct. 2007 à 20:06
Oui c'est vrai, en soit ca n'a pas d'intéret: mais ca illustre bien ce qu'est un pointeur. C'est simplement un entier. Le type pointeur existe juste pour le coté pratique.