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;
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:
[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.
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.
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.
[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.
[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);
}
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 :)
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.