Tableau à un autre tableau
J'ai une boucle qui va quelque chose comme ceci, où arrayfunction définit toutes les valeurs de tableau et compute_with_both_arrays calcule un nombre en fonction de ces deux tableaux.
La façon que je l'ai fait ci-dessous ne fonctionne pas pour array1 = tableau2. Est il possible que je peux le faire sans courir le arrayfuncion deux fois à chaque tour de boucle?
float sum = 0;
float array1[10];
arrayfunction(0, array1);
for(i=1; i<10; i++) {
float array2[10]
arrayfunction(1, array2);
float s;
s = compute_with_both_arrays(array1, array2);
sum = sum + s;
array1 = array2;
}
array1
n'est pas cessible. Si votre extrait de code compilé, je vous suggère de vous débarrasser de votre compilateur.OriginalL'auteur user978281 | 2012-02-13
Vous devez vous connecter pour publier un commentaire.
Vous devez copier manuellement la mémoire d'un tableau à l'autre à l'aide d'une fonction comme
memcpy
.Ainsi, par exemple:
Garder à l'esprit que nous pouvons utiliser la
sizeof
opérateur surarray1
parce que c'est explicitement un tableau alloué sur la pile. Comme un intervenant a noté, nous avons passer la taille de la destination afin d'éviter un tampon sur la course. Notez que la même technique pourrait être fait pour une allouée statiquement tableau en tant que bien, mais vous ne peut pas l'utiliser sur un tableau alloué dynamiquement sur le tas à l'aide demalloc
, ou avec un pointeur vers un tableau ... dans ces situations, vous devez explicitement passer la taille du tableau, en octets, en tant que troisième argument.Enfin, vous aurez envie d'utiliser
memcpy
sur unefor
en boucle parce que la fonction est généralement optimisé pour copier des blocs de la mémoire à l'aide des instructions au niveau du code machine qui va loin-bande de l'efficacité d'une boucle for, même avec les optimisations du compilateur allumé.memcpy
(ou un déroulé copie de la séquence, si la taille est petite) sur leur propre. Cela dit, oui, c'est mieux d'appelermemcpy
.Pour plus de sécurité, vous devriez toujours passer la taille du tableau de destination:
sizeof array1
et passizeof array2
.Merci, j'ai mis à jour l'affichage à cette info
OriginalL'auteur Jason