2013-03-11 2 views
-3

J'ai cherché partout sur Internet pour essayer de trouver une solution à ce problème et j'ai essayé toutes sortes d'arrangements de mon code, mais je n'ai rien trouvé qui fonctionne. ou pourrait produire le bon résultat. Fondamentalement, je veux avoir une fonction qui prend en paramètre un tableau déjà créé, crée un nouveau tableau basé sur le tableau précédent et basé sur la valeur d'un autre paramètre, puis remplace le tableau original utilisé comme paramètre avec le tableau nouvellement créé. Le code ressemblerait à quelque chose comme ceci:Comment créer une fonction qui remplace un tableau par un nouveau tableau en C

void function(double *array, double other_parameter) 
{ 
    /* do some calculations involving the array and the parameter */ 
    double new_array[/* some # */] = /* some expression */; 
    *array = *new_array; 
} 

main() 
{ 
    double *x[/* some # */]; 
    x[0]=/* some # */;x[1]=/* some # */;x[2]=/* some # */,... 
    double par = /* something */ 
    function(x,par); 
    printf("x =\n%f\n%f\n",x[0],x[1],...) 
} 

Toutes les parties représentent simplement commentées quelles que soient les tâches spécifiques que je veux exécuter avec ce tableau et quelles sont les valeurs que j'ai choisi spécifiquement pour lui donner, qui ne sont pas importantes. Ce que j'essaie de comprendre, c'est quelles modifications doivent être apportées aux notations que j'ai utilisées pour les tableaux, les pointeurs et les paramètres; et quels endroits je dois faire ces changements pour obtenir le résultat désiré. Si nécessaire, la taille du tableau d'origine peut être entrée en tant que paramètre supplémentaire dans la fonction si c'est le seul moyen de l'obtenir. J'ajouterai aussi que la taille du nouveau tableau ne sera pas toujours la même que celle de l'original (cela dépendra des paramètres).

J'apprécie vraiment toute aide que quelqu'un pourrait me donner; J'ai bricolé avec le code pendant de longues heures et jusqu'ici je n'ai rien trouvé à faire.

Répondre

1

Si jamais vous allouer un tableau en C, vous ne pouvez jamais le retransmettre dans la pile. (C.-à revenir à la fonction appelante)

Pour créer des tableaux et les renvoyer, vous devez utiliser malloc()

double* my_ar = malloc(sizeof(double) * ar_size); 
... 
free(my_ar); 

Si vous souhaitez étendre ensuite ce tableau

my_ar = realloc(my_ar, sizeof(double) * new_size); 

Cela va soit libérer votre tableau précédent et en créer un nouveau de taille égale et le même contenu OU il va élargir votre tableau précédent en place.

Si vous voulez dupliquer votre tableau

#include <string.h> 
... 
double* new_ar = malloc(my_ar, sizeof(double) * new_ar_size); 
memcpy(new_ar, my_ar, MIN(ar_size, new_ar_size) * sizeof(double)); 
+1

+1, pour les précieuses informations. Pardonnez-moi pour mon intrusion, mais pour allouer la mémoire contiguë, ne sommes-nous pas supposés utiliser 'calloc', au lieu de' malloc' (qui est essentiellement utilisé pour allouer de la mémoire à des objets comme des structures, des unions et tout). Pouvons-nous utiliser 'realloc' avec' calloc' aussi. Je suis trop nouveau pour 'C', j'espère que cela ne vous dérangera pas de poser une telle question :-) –

+1

@GagandeepBali Tout est question de questions! 'calloc' est utilisé si vous voulez d'abord effacer votre bloc. Ainsi, par exemple, une chaîne ('char *') devrait probablement être 'calloc''d. Si vous envisagez de garder une trace de la taille de votre tableau sans marqueur de fin, alors 'calloc' n'est pas nécessaire. La différence dans la mise en œuvre est que 'malloc' vous donne l'espace, mais il est rempli de tout ce qui était là en dernier (si indésirable). 'calloc' vous donne l'espace et l'efface pour vous. 'calloc' est plus ou moins un' malloc' suivi d'un 'memset' –

+1

Wow, ce truc lié à' malloc' et 'calloc' est vraiment instructif. Merci de l'avoir partagé :-), maintenant je n'oublierai pas ça. –

Questions connexes