J'ai appris dans le livre de texte, qu'il n'y a que quelques façons d'initialiser un tableau.
Méthode 1: P>
#include<stdio.h> #include<conio.h> int main() { int i, n; printf("Enter array parameter: \n"); scanf("%d",&n); int a[n]; int b[n]; for(i=0;i<n;i++) { printf("Enter value for array a[%d]: \n",i+1); scanf("%d",&a[i]); } n -= 1; for(i=0;i<=n;i++) { b[i]=a[n-i]; } printf("Value of array b[] is: \n"); for(i=0;i<=n;i++) { printf("%d ",b[i]); } for(i=0;i<=n;i++) { printf("\narray b[%d] = %d ",i,b[i]); } getch(); }
5 Réponses :
int ary[5] = {1,2,3,4,5};
C'est la norme ISO / CEI 9899: 1999 [9] C. Voir le lien pour plus de détails sur les normes C: lien
Array Initialisation dans C CODE>:
if(scanf("%d",&n) == EOF){
/*errors ocuured*/
f_invoke_error_handling_rotuine();
}
Vous avez un grand nombre de problèmes, comportement non défini em> étant le plus critique: quand Vous ne parvenez pas à vérifier le retour de toute entrée d'utilisateur. Essayez d'entrer '"one"' ou frapper accidentellement n'utilise pas qui dit, lorsque vous devez faire des tâches répétitives telles que prenant une entrée entière, écrivez une fonction courte pour le faire. Vous pouvez écrire un qui prend un pointeur sur l'entier à remplir et un pointeur à l'invite à afficher et à renvoyer le reste de votre programme pour lire un tableau dans Exemple Utilisez / sortie Strong> P > Toutes les entrées valides: p> erreurs en entrée: p> utilisateur annule l'entrée: p> i == n code>, vous Index un au-delà de la fin de votre
B [] code> tableau. Tous les tableaux en C sont nuls sont indexés, de sorte que vos limites de boucle sont
0 . En utilisant
i vous en boucle un-trop souvent. P>
'r' code> au lieu de
4 code> et voyez ce qui se passe. Vous devez
1, 2, 'r', 5 code>? Vous devez également vider
stdin code> de tous les caractères étrangers ou ils vous mordront à nouveau sur votre prochaine entrée. P>
conio.h code>. Cela rend votre code 100% non portable. Vous pouvez utiliser les fonctions dans
stdio.h code> pour vos besoins. P>
0 code> sur succès ou
-1 code> si l'utilisateur annule la saisie par Génération d'un manuel
EOF CODE> avec Ctrl + D KBD> sur Linux ou Ctrl + Z KBD> sous Windows. Vous pouvez ajouter une fonction d'assistance à vide
stdin code>, par exemple p>
A [] code> et inverser-le dans
b [] code> est simplement: p>
$ ./bin/getarray
Enter array parameter: 5
enter value for a[1]: 5
enter value for a[2]: 4
enter value for a[3]: 3
enter value for a[4]: (user canceled input)
Comme quelqu'un l'a noté, le premier moyen ne fonctionne pas dans C. Il est valide C ++ cependant.
La deuxième manière Vous pouvez également le faire comme ce dans votre code, vous utilisez quelque chose appelé tableaux de longueur variable (VLAS) et indiqué par Wikipedia , ils sont alloués à une durée de stockage automatique sur la pile. Cela signifie que lorsque la fonction où vous les avez déclarées, leur durée de vie se termine également (elles sont locales à la portée de la fonction que vous les déclarez). Pour comprendre pourquoi cela est important, considérez cette pièce de code: p> pour corriger ce problème, vous devez utiliser La raison pour laquelle cela fonctionne est que la mémoire allouée à l'aide de int ary [] = {1,2,3,4,5}; Code> Works, le tableau
Ary code> est initialisé avec 5 éléments à la compilation (avant même d'exécuter le programme). La mémoire est allouée sur la pile. P>
int ary [6] = {1,2,3,4,5}; code>, où vous Spécifiez quelle longueur vous voulez que le tableau soit. Vous pouvez ensuite accéder à
ary [5] code> et le modifier à toute valeur que vous souhaitez (par défaut, il est 0). P>
ary [6] code> est hors limites, car les éléments de la matrice vont de 0 à 5. p>
masloc code> défini dans
stdlib.h code>. p>
Malloc code> est allouée sur le tas, ce qui signifie qu'il survit à la Durée entière du programme Sauf si vous le comprenez vous-même (cela signifie que vous devez libérer la mémoire à la fin à l'aide de la fonction
GRATUITE code>). p> p>
"Ce code serait-il bien? Quelqu'un peut-il m'apprendre une meilleure façon de le faire?" P>
Ce code est correct d'une perspective syntaxtique (vous avez corrigé la mauvaise initialisation), mais pas portable car vous utilisez des tableaux de longueur variable em> (VLAS) qui pourrait ne pas être supporté par aucune implémentation (elles sont fournies mon Extensions de compilateur) et n'étaient que totalement conformes à la norme C99. P>
Un meilleur moyen de le faire, est d'utiliser
MALLOC () code> et d'allouer la mémoire de la matrice sur le tableau tas. p>
Cela a également l'avantage que vous pouvez redimensionner le tableau si vous souhaitez (le rendre plus grand Fe) et
gratuit () code> la mémoire de la matrice quand ce n'est plus nécessaire . P>
Stuff associé: p>
int ary [5] {1,2,3,4,5}; code> - vous ne pouvez pas le faire dans C. Il est valide en C ++ 11
Votre code est fragile. Vous ne pouvez utiliser aucune fonction d'entrée d'utilisateur, par exemple
scanf ("% d", & n) code> correctement sauf si vous Vérifiez le retour b>, par ex.
si (scanf ("% d", & n)! = 1) {Fallts ("Erreur: entrée entière non valide. \ N", stardr); retour 1; } CODE> Sinon, comprenez que vous utilisez Longueur variable des tableaux i> (VLAS) qui peuvent ne pas être pris en charge par tous les compilateurs commençant par C11. N'incluez pas
conio.h code>, cet en-tête de DOS antique rend votre code 100% non portable à autre chose que la fenêtre.
stdio.h code> vous offre tout ce dont vous avez besoin. Il suffit d'utiliser
getchar () code> pour maintenir votre fenêtre ouverte au lieu de
getch () code>.
Je digeste mais qu'est-ce que c'est C11? et j'utilise dev c ++ 5.11. De quoi parle la version du compilateur?
Votre sortie est simplement du texte brut. Pas besoin d'ajouter une capture d'écran au lieu de simplement copier et collez-la sous forme de texte dans votre question.
C11 est la version 2011 de la norme C. Mais méfiez-vous, le premier commentaire n'a pas mentionné C11, mais C ++ 11 qui est la version 2011 de C ++. Et comme nous le savons, C et C ++ sont des langues très différentes.