2012-03-06 4 views
0
void arrayRound(int id, double baln) 
{ 
    baln[id] = (baln[id]*100) + 0.5; 
    int temp = (int) baln[id]; 
    baln[id] = (double) temp; 
    baln[id] = baln[id]/100; 
} 

Le corps de la fonction est ce qui me donne des messages d'erreur. La fonction est destinée à arrondir un indice de tableau au centième le plus proche. J'ai séparément passé la variable d'index et le tableau à la fonction. Voici le message d'erreur:Que signifie cette erreur de tableau?

Fxns.c:70: error: subscripted value is neither array nor pointer 
Fxns.c:70: error: subscripted value is neither array nor pointer 
Fxns.c:71: error: subscripted value is neither array nor pointer 
Fxns.c:72: error: subscripted value is neither array nor pointer 
Fxns.c:73: error: subscripted value is neither array nor pointer 
Fxns.c:73: error: subscripted value is neither array nor pointer 

Ma première hypothèse était que je devais inclure des crochets vides après la BALN dans le domaine des paramètres, mais cela n'a pas aidé. Des idées?

+0

Vous devez inclure des parenthèses vides après 'baln' dans la liste des arguments. Pouvez-vous montrer cette tentative, s'il vous plaît? – Ryan

+0

Si vous regardez les paramètres de la fonction, baln n'est "ni tableau ni pointeur" mais plutôt listé comme un double. Avez-vous tapé ou oublié de faire un pointeur? – tamarintech

Répondre

1

Vous aviez raison; vous avez besoin d'inclure des crochets vides après baln dans la liste des paramètres, comme ceci:

void arrayRound(int id, double baln[]); 

Here's a full demo.

+0

Merci. Le message d'erreur précédent avec les crochets doit avoir été provoqué par une autre erreur. – cantouno

+0

@SaiPrasadChimata Étant donné que vous ne connaissez pas encore Stack Overflow, vous n'êtes peut-être pas conscient de la possibilité de marquer une réponse comme acceptée en cliquant sur la coche qui se trouve à côté si elle résout votre problème. Cela marque la réponse à la question, de sorte que les téléspectateurs futurs n'ont pas besoin de vérifier si une réponse a été trouvée. S'il y a plusieurs réponses pour résoudre le problème et qu'aucune n'est nettement meilleure que les autres - comme c'est le cas ici, pour autant que je puisse le voir - le choix d'accepter est arbitraire, mais il est courant de choisir le premier. être minitech. Mais vous n'avez pas besoin d'accepter une réponse si vous ne le souhaitez pas –

+0

@DanielFischer: En fait, vous étiez le premier à 32 secondes :) Donc, le vôtre devrait certainement être la réponse acceptée. – Ryan

1

Vous essayez de traiter baln de type double comme un tableau (en utilisant un index.) Cela ne fonctionnera pas.

1

Votre paramètre doit être déclarée comme

double *baln 

un pointeur vers double, ou double baln[], qui se lit comme un tableau de double s, mais en tant que paramètre de fonction indique également un pointeur.

void arrayRound(int id, double *baln) 
{ 
    baln[id] = (baln[id]*100) + 0.5; 
    int temp = (int) baln[id]; 
    baln[id] = (double) temp; 
    baln[id] = baln[id]/100; 
} 

compilera, mais puisque vous ne savez pas quelle taille le bloc de mémoire baln points est, vous pouvez accéder à la mémoire non allouée dans cette fonction, si vous ne faites pas attention.

0

error: subscripted value is neither array nor pointer

baln[id] 

indicés Valeur = BALN

opérateur [], ne peut être utilisé soit sur des tableaux ou des pointeurs. Dans votre cas, baln n'est ni l'un ni l'autre. Il est de type double mais pas double[] ou double*.

int a[] = { 1,2,3,4,5 }; 
a[0] = 10; // Notice the use of `[]`.This is valid because `a` is an array type. 

int b = 10; 
int * ptr = &b; 
ptr[0] = 99; // Valid because ptr is a pointer type but cause undefined 
       // behaviour for any other index in this example. 

*ptr = 99 ; // This is more readable than the earlier case.