Pointeur en c

Résolu/Fermé
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 - 25 févr. 2011 à 17:02
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 - 25 févr. 2011 à 21:35
Bonjour,

j'ai 2 tableau en c sous forme

double *c = (double *) calloc (50, sizeof(double));
double *ress = (double *) calloc (100, sizeof(double));

comment je peux copier le tableau c au tableau ress apartir de la 10 iemme colonnes du tableau ress?


merci

4 réponses

arthurc Messages postés 26 Date d'inscription mardi 22 février 2011 Statut Membre Dernière intervention 25 mars 2011 4
25 févr. 2011 à 17:26
Salut

avec memcpy:
void *memcpy(void *dest, const void *src, size_t n);
0
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 25/02/2011 à 17:33
Bonjour,
ça donne c[50] et ress[100]
int i;
for(i=0;i<50;i++) ress[i+10]=c[i];
un truc comme ça
0
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
25 févr. 2011 à 17:49
@Hxyp j'ai essayé comme tu m'a dit elle n'a pas marché

@arthurc j'ai essayé comsa mais s'a marche pas

memcpy(ress+10, c, sizeof(double));


merci bcp mes amis
0
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 25/02/2011 à 21:25
Ma proposition fonctionne et celle d'arthurc aussi. Code pour l'exemple :
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

/*test1 utilisant une boucle*/ 
void test1() 
  { 
    double *c=calloc(50,sizeof(double)); 
    double *ress=calloc(100,sizeof(double)); 
    int i; 
    //remplissage de c 1-50 : 
    for(i=0;i<50;i++)c[i]=(double)i+1; 
    //copy de c dans ress a partir de la 10e valeur de ress : 
    for(i=0;i<50;i++)ress[i+10]=c[i]; 
    //affichage de ress : 
    for(i=0;i<100;i++)printf("ress[%d]=%f\n",i,ress[i]); 
    free(c); 
    free(ress); 
  } 
/*test2 utilisant memcpy*/ 
void test2() 
  { 
    double *c=calloc(50,sizeof(double)); 
    double *ress=calloc(100,sizeof(double)); 
    double *ptr; 
    int i; 
    ptr=&ress[10];//ptr pointe à partir de l'adresse ress[10] donc ptr[0]==ress[10] 
    //remplissage de c 1-50 : 
    for(i=0;i<50;i++)c[i]=(double)i+1; 
    //copy de c dans ress a partir de la 10e valeur de ress : 
    memcpy(ptr,c,50*sizeof(double)); 
    //affichage de ress : 
    for(i=0;i<100;i++)printf("ress[%d]=%f\n",i,ress[i]); 
    free(c); 
    free(ress); 
  } 

int main() 
  { 
    printf("test1 :\n"); 
    test1(); 
    printf("test2 :\n"); 
    test2(); 
    return EXIT_SUCCESS; 
  } 

edit : correction d'une bêtise ..
0
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
25 févr. 2011 à 21:35
merci mes amis j'ai réglé mon prb c'était au niveau algorithmique
0