Comment pourrais-je lire, disons 10 flottants et les stocker dans un tableau sans perdre de mémoire?
int size = 10; float vet[size]; for(i = 0; i < size; i++){ scanf("%f", &vet[i]); }
Aussi simple que cela pourrait être 🙂
Aha. Ce n’est pas la lecture des flotteurs, c’est le problème, c’est la mémoire. Vous lisez dans i , et vous avez besoin d’un tableau qui contienne exactement i
Cela sent vraiment les devoirs, ce qui est bien, mais je suis trop l’enseignant pour vous donner la réponse complète. Je vais donc vous dire que vous avez besoin d’une fonction C nommée malloc () et d’un opérateur C (il ressemble à une fonction mais il est en fait intégré dans le langage) nommé sizeof .
Regardez ce tutoriel .
Yup, vous l’avez là. Voici le code de votre commentaire, formaté.
int n,index; float temp; scanf("%d",&n); float *pValues=(float *)calloc(n,sizeof(float)); for(index=0;index
Je le ferais avec deux changements:
malloc
pour autre chose que des caractères *(pValues+index)
est exactement équivalent à pValues[index]
. Donc, je réécrirais ceci en tant que:
int n,index; float temp; scanf("%d",&n); float *pValues=(float *)malloc(n*sizeof(float)); for(index=0;index
Regardons une autre transformation du code. Vous avez pValues
, qui est un pointeur à float
. Vous avez &temp
, qui est aussi un pointeur sur float
, car &
est l'adresse-de-opérateur et temp
est un float
. ET vous ne faites que de l'arithmétique de pointeur avec votre index. Nous pourrions donc réécrire cette fois encore:
int n,index; // Don't need temp scanf("%d",&n); float *pValues=(float *)malloc(n*sizeof(float)); for(index=0;index
Maintenant, question de quiz: que se passerait-il si vous faisiez la boucle
for(index=0;index
Vous devrez être plus précis sur le problème.
À moins que vous n’ayez autre chose à faire avec ces chiffres, le moyen le plus simple d’économiser de la mémoire consiste à ne pas les stocker dans un tableau.
Cela ressemble à ce que vous voulez, c’est quelque chose.
sum = 0;
faire
lire courant
sum + = courant
pendant que (vous n’avez pas encore lu 10 chiffres);
La réponse à votre question est que vous ne pouvez pas append d’éléments à un tableau et vous attendre à ce qu’il utilise de la mémoire.
float arr[10]; for(i = 0; i < 10; i++){ scanf("%f", &arr[i]); }
Je sais, c'est comme ci-dessus, mais n'utilise pas l'extra supplémentaire si ce n'est pas optimisé. héhé
Pour utiliser encore moins de mémoire, utilisez le code ci-dessous. Ils sont tous lus dans un tableau, mais seul le dernier à être lu est dans le tableau:
float arr[1]; for(i = 0; i < 10; i++){ scanf("%f", &arr[0]); }
sonne comme un devoir.
lit le nombre de flottants de l’entrée. multiplier par la taille d’un flottant individuel allouer le nombre exact d’octets stockant l’adresse dans un pointeur afin que les flottants aient une boucle lue dans les flottants à partir de l’entrée aient une boucle qui additionne tous les flottants du tableau
Je pense que la leçon à faire est de réaliser la connexion entre le terme pointeur et tableau, bien que vous puissiez le faire sans aucune indexation de tableau, mais votre question implique que vous deviez utiliser un tableau.