Je viens de langages de haut niveau et j'essaie d'apprendre c et d'améliorer mes connaissances de la manière dont les choses fonctionnent dans des niveaux inférieurs.
J'essaie donc de comprendre comment est-il possible d'obtenir uniquement des indices de tableau initialisés. Ils pourraient être non séquentiels alors simplement itération sur la matrice ne fera pas le travail. P>
Supposons donc que nous ayons un éventail d'entiers de taille 20, Seuls quelques éléments de cette matrice ont été initialisés avec la valeur '1' p>
Comment puis-je savoir quels index ont été initialisés? P> donc par exemple ci-dessus comment obtenir 1,5,8,16 en résultat?
Est-ce que même la bonne façon de travailler avec des tableaux en C? P> p>
3 Réponses :
On ne se souvient pas desquels lesquels ont été initialisés et ceux qui ne l'ont pas fait. Dans votre exemple, vous pouvez par exemple les initialiser tous à 0 code>, puis cochez toutes les valeurs qui ne sont pas
0 code>.
data[1] is initialized to 1
data[5] is initialized to 1
data[8] is initialized to 1
data[16] is initialized to 1
Sachez cependant que les données globales sont initialisées tous les zéros par défaut. Cela dépend de l'emplacement de la Déclaration: si le tableau est automatique (local, sur la pile), il peut contenir des ordures, jusqu'à ce qu'il soit explicitement rempli; Si la matrice est statique, globale, elle est initialisée avec des zéros.
Les éléments de repos de la matrice contiendront des valeurs totalement aléatoires, éventuellement 1, vous pouvez donc trouver plus de 4 éléments contenant 1 valeur. p>
Pour initialiser un tableau, vous devez l'introduire ou utiliser La façon dont vous définissez memset (données, 0, taille de taille (données) code>. p>
1 code> dans certains éléments est plus d'attribution et non d'initialisation. p>
Le reste de la matrice ne peut être présumé pour contenir des valeurs du tout, aléatoires ou autrement. Pour la norme C, les valeurs des éléments non initialisés sont non spécifiées. Tel qu'utilisé dans la norme C, cela ne signifie pas seulement qu'un élément détient une certaine valeur non déterminée par le programme, comme tout ce qui est arrivé à rester à la mémoire des opérations précédentes, mais que sa valeur n'est pas spécifiée chaque fois qu'elle est utilisée. Il pourrait sembler être différent à des moments différents, même sans changement intermédiaire par le programme. La norme C offre des implémentations cette latitude pour permettre l'optimisation.
On ne "a pas à" itérer ou utiliser memset code> pour initialiser un tableau. À l'exception des tableaux de longueur variable, une matrice peut être initialisée dans sa définition comme dans les données
int [20] = {...}; code>. Toutes les valeurs non explicitement énumérées dans les initialisateurs seront initialisées à zéro.
in c, tableau contient des valeurs elles-mêmes, plutôt que des références à des valeurs. Pour votre En d'autres termes, tous Les éléments de votre matrice sont initialisés juste après la déclaration de tableau. Dans votre cas particulier, ils sont initialisés avec certaines valeurs détruites de la pile. Si vous souhaitez les initialiser avec certaines valeurs particulières, vous devez utiliser Initializer Array, comme celui-ci: P> Int Data [20] Code> Il y aura 20 emplacements alloués dans la pile, avec chaque machine à sous contenant une valeur unique de type
int code>. Les emplacements alloués ne sont pas effacés. Les valeurs initiales d'éléments de tableau seront donc les données stockées dans ces emplacements de pile par qui les utilisaient avant. Affectations que vous avez faites pour les éléments de tableau, tels que
data [8] = 1; code> n'initialise pas les éléments de tableau, ils remplacent simplement les valeurs actuelles des éléments par une nouvelle valeur.
int a = 13; // Initialize to 13
int b; // Initialize to garbage from stack
a = 11; // Just assignment, not initialization
b = 17; // Yet another assignment, not initialization
On ne peut pas compter sur des éléments de tableau contenant toutes les données stockées sur la pile précédemment. Pour la norme C, les valeurs des éléments non initialisés sont non spécifiées. Tel qu'utilisé dans la norme C, cela ne signifie pas seulement qu'un élément détient une certaine valeur non déterminée par le programme, comme tout ce qui est arrivé à rester à la mémoire des opérations précédentes, mais que sa valeur n'est pas spécifiée chaque fois qu'elle est utilisée. Il pourrait sembler être différent à des moments différents, même sans changement intermédiaire par le programme. La norme C offre des implémentations cette latitude pour permettre l'optimisation.
Voir aussi geeksforgeeks.org/designated-Initializers-c
Les variables non initialisées peuvent également obtenir des valeurs de déchets. Cela dépend de votre ensemble de données I.E si vous avez une plage de valeurs spécifique pour la matrice, vous pouvez avoir cette vérification pour trouver des valeurs non initialisées.