0
votes

Comment déclarer une matrice de longueur variable et l'initialiser à zéro?

int n;
scanf("%d",&n);
int arr[n];
arr[n]={0};
I want to initialize all elements to 0.on compilation i get error "expected expression" at line 4 position 8.I searched but found no method to do that.

0 commentaires

3 Réponses :


0
votes

au lieu de

arr [n] = {0};

Vous devez (en supposant des variables automatiques)

en définition (en supposant n est une expression constante): xxx

ou après définition après la définition xxx

ou xxx

si n est une expression constante et le arr comp a une durée de stockage statique (global ou a un mot clé statique avant IT), vous n'avez rien à faire


4 commentaires

VLAS ne peut pas être initialisé.


@usr était un peu imprécis


Les VLAS doivent être sur la pile ou sur le tas; De toute façon, vous devez utiliser memset () .


Sauf si ce ne sont pas VLAS (notez la remarque de const expression)



4
votes

VLAS (tableaux de longueur variable) ne peuvent pas être initialisés.

Vous pouvez plutôt utiliser memset : xxx

Alternativement, vous pouvez utiliser une matrice de taille fixe (par exemple, int ARR [25] = {0}; ) ou une matrice allouée dynamiquement (par exemple avec calloc que zéro initialise).


0 commentaires

0
votes
6.7.9
...
contraintes
...
3 Le type de l'entité à initialiser doit être une matrice de taille inconnue ou complète Type d'objet ce n'est pas un type de matrice de longueur variable.

C 2011 en ligne Projet

emphase ajoutée. Les VLAS peuvent ne pas avoir d'initialisateur dans le cadre de leur définition. Vous devrez zéro sortir le tableau après la déclaration, soit en utilisant Memset ou une boucle comme indiqué par d'autres.


0 commentaires