[C] Echanger les adresses de 2 tableaux

  • Auteur de la discussion Membre supprimé 1
  • Date de début
M

Membre supprimé 1

Invité
[fixed]#include <stdio.h>


int main()
{
int *i;
int tab[5]={40, 290, 350, 41, 500}, u;
int t[5]={5, 4, 9, 6, 3};

i = tab;
tab = t; Ceci ne marche pas :/
t = i;

for (u=0 ; u<5 ; u++)
printf("%d\t", tab);

printf("\n");

for (u=0 ; u<5 ; u++)
printf("%d\t", t);

return 0;
}[/fixed]

Salut,
Comment échanger les adresses de 2 tableaux en C ?
J'ai fais pointer i sur l'adresse de tab[0] mais j'aimerai maintenant faire pointer l'adresse de tab[0] sur t, puis l'adresse de t[0] sur i :)
merci :hello:
 

calavera

Expert
[g]Petite définition :[/g]

Un pointeur est une variable spéciale qui peut contenir
l'adresse d'une autre variable.


Remarque importante :
■Un pointeur est une variable qui peut 'pointer' sur différentes adresses.
■Le nom d'une variable reste toujours lié à la même adresse.

Donc tu ne peux pas echanger les adresses de tes tableaux ainsi. Tu dois donc travailler avec l'aide de pointeur !

[cpp]#include <stdio.h>


int main()
{
int *i;
int tab[5]={40, 290, 350, 41, 500}, u;
int t[5]={5, 4, 9, 6, 3};

int * pointeur; // Création d'un pointeur de Int !

pointeur = tab;

for (u=0 ; u<5 ; u++)
printf("%d\t", *(pointeur+u));

printf("\n");

pointeur = t;
for (u=0 ; u<5 ; u++)
printf("%d\t", *(pointeur+u));

return 0;
}[/cpp]

recherche un cours sur les pointeurs pour que tu sois au clair la dessus, c'est très important !
 
M

Membre supprimé 1

Invité
[citation=3809,1][nom]calavera a écrit[/nom][g]Petite définition :[/g]

Un pointeur est une variable spéciale qui peut contenir
l'adresse d'une autre variable.


Remarque importante :
■Un pointeur est une variable qui peut 'pointer' sur différentes adresses.
■Le nom d'une variable reste toujours lié à la même adresse.

Donc tu ne peux pas echanger les adresses de tes tableaux ainsi. Tu dois donc travailler avec l'aide de pointeur !

[cpp]#include <stdio.h>


int main()
{
int *i;
int tab[5]={40, 290, 350, 41, 500}, u;
int t[5]={5, 4, 9, 6, 3};

int * pointeur; // Création d'un pointeur de Int !

pointeur = tab;

for (u=0 ; u<5 ; u++)
printf("%d\t", *(pointeur+u));

printf("\n");

pointeur = t;
for (u=0 ; u<5 ; u++)
printf("%d\t", *(pointeur+u));

return 0;
}[/cpp]

recherche un cours sur les pointeurs pour que tu sois au clair la dessus, c'est très important !

[/citation]
Merci mais ct pas vraiment ske je voulais faire
Après recherche c'est en fait impossible (je voulais échanger les adresses des 2 premières cases des tableaux)
Voila voila
:hello:
 

calavera

Expert
Vi c'est ce que je voulais t'expliquer et je voulais droit te montrer la seule façon de faire soit les pointeurs

j'avais bien indiqué que c'était impossible je te l'avais mis dans les remarques

Le nom d'une variable reste toujours lié à la même adresse

D'après ce que j'avais compris tu voulais que t devienne un symbole pointant sur tab et tab qui pointe sur t. Ce n'est pas possible en effet comme je l'avais dis dans la remarque.
Sinon travaille avec des tableaux dynamique ainsi tu auras que des pointeurs et tu pourras facilement les échanger. Mais dans cet exemple il n'y a on est bien d'accord aucun intéret !
 
M

Membre supprimé 1

Invité
[citation=3821,1][nom]calavera a écrit[/nom]Vi c'est ce que je voulais t'expliquer et je voulais droit te montrer la seule façon de faire soit les pointeurs

j'avais bien indiqué que c'était impossible je te l'avais mis dans les remarques

Le nom d'une variable reste toujours lié à la même adresse

D'après ce que j'avais compris tu voulais que t devienne un symbole pointant sur tab et tab qui pointe sur t. Ce n'est pas possible en effet comme je l'avais dis dans la remarque.
Sinon travaille avec des tableaux dynamique ainsi tu auras que des pointeurs et tu pourras facilement les échanger. Mais dans cet exemple il n'y a on est bien d'accord aucun intéret !
[/citation]
Salut !
J'ai compris qu'on ne pouvait pas changer l'adresse dépendante à un nom de variable, cependant j'ai écris un petit truc mais il doit y avoir des erreurs puisque ca n'affiche pas ce que je voudrai, je pense que l'erreur se situe au niveau du pointeur retourné par fct() et après je dis que p = fct(); dans la main, à mon avis ca ne doit pas etre correct
Voici le code, merci de m'éclairer :)
C'est très gentil de prendre du temps pour répondre à mes erreurs de nioob :merci:
:hello:
[cpp]#include <stdio.h>

int *fct()
{ int tab[5]={1, 2, 3, 4, 5};
int *pointeur;

pointeur = tab;

return pointeur;
}





int main()
{int *p;
int i;
p = fct();

for (i=0 ; i<5 ; i++)
{ printf("%d\t", p); }

return 0;
}[/cpp]
 

Jul pa

Habitué
Ton tableau est créé juste pour la fonction, après l'espace est libéré.

Si tu veux allouer et renvoyer l'adresse d'un tableau faut faire un malloc :

int * p = (int *) malloc (sizeof(int) * nb_element);
 
M

Membre supprimé 1

Invité
[citation=3825,1][nom]Jul PA a écrit[/nom]Ton tableau est créé juste pour la fonction, après l'espace est libéré.

Si tu veux allouer et renvoyer l'adresse d'un tableau faut faire un malloc :

int * p = (int *) malloc (sizeof(int) * nb_element);
[/citation]

Comment ça ?
(Je n'ai pas encore vu la fonction malloc en cours)
J'ai cherché un cours sur le net et j'ai écris ça mais ca ne marche tj pas :/

[cpp]#include <stdio.h>

int *fct()
{ int tab[5]={1, 2, 3, 4, 5};
int *pointeur;

pointeur = (int*)malloc(20); /* C'est ce que j'ai rajouté*/

pointeur = tab;

return pointeur;
} [/cpp]
 

Jul pa

Habitué
T'as plus besoin de ton tableau de départ, avec malloc t'en alloue un, après tu le rempli comme tu veux.

[cpp]#include <stdio.h>

int * fct()
{
int * pointeur;

pointeur = (int*)malloc(20); /* C'est ce que j'ai rajouté*/
/*mets plutot sizeof(<type>)* nombre d'élement comme ça c'est portable (c'est pas toujours sur que les int soit sur 4 espaces mémoires)*/

/*rempli ton tableau ici*/

return pointeur;
} [/cpp]
 
M

Membre supprimé 1

Invité
[citation=3833,1][nom]Jul PA a écrit[/nom]T'as plus besoin de ton tableau de départ, avec malloc t'en alloue un, après tu le rempli comme tu veux.

[cpp]#include <stdio.h>

int * fct()
{
int * pointeur;

pointeur = (int*)malloc(20); /* C'est ce que j'ai rajouté*/
/*mets plutot sizeof(<type>)* nombre d'élement comme ça c'est portable (c'est pas toujours sur que les int soit sur 4 espaces mémoires)*/

/*rempli ton tableau ici*/

return pointeur;
} [/cpp]
[/citation]
ah ookk ca marche :)
Merci :merci:
J'ai demandé à mon prof auj il m'a expliqué un ptit peu mais il a dit qu'on verrait ca bientot en TP
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 000
Membres
1 586 387
Dernier membre
ouistititouille
Partager cette page
Haut