en passant l'argument qui rend pointeur d'entier
Je ne trouve pas mon problème. continue de me donner ces erreurs:
"c:2:5: note: expected 'int *' but argument is of type 'int'"
"c:28:1: warning: passing argument 1 of 'CountEvenNumbers' makes pointer from
integer without a cast [enabled by default]"
Voici le code:
1 #include <stdio.h>
2 int CountEvenNumbers(int numbers[], int length);
3 int main(void)
4 {
5 int length;
6 int X;int Z; int Y; int W;
7 X=0;Y=0;Z=0;W=0;
8 printf("Enter list length\n");
9 scanf("%d",&length);
10 int numbers[length];
11
12 if (length<=0)
13 . {printf("sorry too low of a value\n");
14 . . return 0;}
15 else
16 . {
17 . printf("Now, enter %d integers\n",length);
18 . for (X=0;X<length;X++)
19 . . {scanf("%d",&Y);//X is position in array, Y is value.
20 . . numbers[X]=Y;
21 . . }
22 . printf("The list reads in as follows:\n");
23 . for (W=0;W<length;W++)
24 . . {Z=numbers[W];
25 . . printf("%d ",Z);}
26 . printf("\n");
27 . }
28 CountEvenNumbers( numbers[length] , length );
29 return 0;
30 }
31
32 int CountEvenNumbers(int numbers[], int length)
33 {
34 . int odd_count;int even_count;int P;int Q;
35 . Q=0; odd_count=0;even_count=0;
36 . for (P=0;P<length;P++)
37 . . if (numbers[Q]==0)
38 . . . {even_count++;
39 . . . Q++;}
40 . . else if ((numbers[Q]%2)!=0)
41 . . . {odd_count++;
42 . . . Q++;}
43 . . else
44 . . . {even_count++;
45 . . . Q++;}
46 . printf("There are %d even numbers in the series\n",even_count);
47 . return 0;
48 }
Bravo, y compris pour les numéros de ligne dans votre code!
OriginalL'auteur Bronson Stephens | 2013-03-01
Vous devez vous connecter pour publier un commentaire.
La réponse à votre question est à ce swap:
pour cette
Toutefois, si vous continuez avec le codage, une compétence que vous pourriez trouver inestimable est d'analyser warrning/messages d'erreur:
Alors qu'est-ce que cela signifie? Il précise que sur la ligne 28 (
CountEvenNumbers( numbers[length] , length );
) il prévu de vous faire un casting d'argument 1, ce qui signifie que vous avez passé quelque chose qu'il ne s'attendait pas. Donc, vous savez que quelque chose est incorrect avec le premier argument.L'astuce ici est l'autre ligne:
expected 'int *' but argument is of type 'int'
C'est en disant: "je voulais un pointeur vers un entier, mais vous m'avez seulement un nombre entier". C'est comment vous savez que vous êtes de passage le mauvais type.Donc ce que vous devriez vous poser est, de quel type est l'argument 1? Vous le savez si vous souhaitez accéder à un élément dans le tableau, vous devez utiliser le
[]
's, (vous l'avez fait sur les lignes 20 et 25 de votre code), donc en passantnumbers[length]
à votre fonction, vous essayez de passer à un seul élément1 au lieu d'un éventail complet comme il attend.L'autre moitié de ce qui est
expected 'int *'
, pourquoi votre fonction s'attendre à obtenir un pointeur vers un int? Eh bien, c'est parce qu'en C, lorsque vous passez un tableau de (type) il les désintégrations à un pointeur (type).1, les numéros de cours[longueur] n'est pas vraiment un élément dans votre tableau de toute façon, il déborde.
OriginalL'auteur Mike
Sur la ligne 28, vous êtes en essayant de passer la entier à l'index "longueur" des numéros. Vous devez juste passer les numéros de lui-même, donc quelque chose comme
CountEvenNumbers(numbers, length);
OriginalL'auteur Ken
Lire un C tutoriel, vraiment.
array[index]
exposants/indices de la matrice, et donc il rendementsindex
ème élément du tableau. Si vous souhaitez passer le tableau pour être exploité sur lui-même (enfin, plutôt un pointeur vers son premier élément), puis il suffit d'écrire son nom:OriginalL'auteur
De l'essayer.
OriginalL'auteur Anastacio Gianareas