`int main()
{
int nums[3][2] = {{1, 2}, {3, 4}, {5, 6}};
printf("%d", nums[2][1]);
return 0;
}`
Here, if I wanted to access the last element of the array, I would use [2][1] but to name the array, I would use 1 based indexing and use [3][2]. Can someone please explain why?
3 Réponses :
Vous êtes déroutant longueur em> avec index em>. Pour une gamme de longueur n em> les index sont 0 em> via n-1 em>. c'est: p> signifie La longueur est uniquement "1 basée" parce que lorsque nous parlons d'une matrice de longueur 1, nous signifions généralement que cela peut contenir une entrée, comme dans ce que c'est comment les humains ont tendance à compter. L'index, cependant, est un décalage à partir du début em>, car il s'agit vraiment d'un artefact de la manière dont c fonctionne en interne: p> où quand vous dites < Code> x [0] code> Vous dites "Appliquez un décalage zéro au début de la matrice et lisez la valeur" qui se traduit par des termes humains comme "Lire le premier élément", même si les instructions de la machine générées ressemblent à Beaucoup plus comme la première explication. P> Autres langues qui implémentent des tableaux basés sur 1 doivent soustraire ce décalage pour lire l'emplacement de mémoire correct. En d'autres termes ils le simulent em>. P> p> x [0] code>, x [1] code> et x [2] code> existe. Il y a 3 entrées numérotées 0 .. 2. P>
Oh! Droite. Merci.
@tadman J'étais sur le point d'ajouter le * (x + n) code> exemple, mais je préfère plutôt cela. Même si vous êtes déjà à 174k Rep ...
@JanchristophTherasa Il n'y en a qu'une explication à une longue ou à une longue explication à la fois!
Lorsque vous «nommez» le tableau (le terme approprié est «déclarer / définir»), les chiffres représentent la taille, ou plus précisément le nombre d'éléments dans la matrice. P>
Lorsque vous accédez à un élément, vous utilisez l'index de l'élément dans le tableau, qui est fondamentalement "jusqu'où, dans le nombre d'éléments, est-il du début de la matrice". P>
alors le premier élément a indice 0. P>
Le nombre de crochets d'une déclaration de tableau est le nombre d'éléments, et non l'index du dernier élément. Mais c'est une écart intéressant de la philosophie indiquée de la façon dont les déclarations C fonctionnent. P>
Kernighan et Ritchie ont décrit comment un déclarant a fourni une sorte d'image d'un identifiant utilisé, dans le langage de programmation C em>, 1978, page 90: P>
La déclaration du pointeur est conçu comme un mnémonique; il dit que la combinaison dit que dans une expression Ainsi, nous voyons que, dans une déclaration telle que Si nous étions fidèles à ce modèle, alors Ceci est en grande partie une décision arbitraire: un compilateur peut être conçu pour fonctionner de toute façon. Je ne vois pas que Kernighan et Ritchie discutent de ce choix, dans l'une des éditions de le langage de programmation C em>. Ils se réfèrent au nombre de "liés" sur la taille de la matrice, mais il n'est pas indiqué pourquoi ils ont été déviés du schéma "Image" pour utiliser un certain nombre d'éléments au lieu d'un exemple d'index. (Curieusement, je ne vois même pas une déclaration que le nombre est le nombre d'éléments. Je vois des exemples qui l'indiquent mais aucune déclaration explicite.) P>
px code> est neuf. p>
int * px; code> p>
* px code> est un int code>, c'est-à-dire si px code> se produit dans le contexte * px code>, C'est équivalent à une variable du type int code>. En effet, la syntaxe de la déclaration d'une variable imite la syntaxe des expressions dans lesquelles la variable pourrait apparaître. Ce raisonnement est utile dans tous les cas impliquant des déclarations compliquées. Par exemple, p>
double atof (), * dp; code> p>
atof () code> et * dp code> avoir des valeurs de type double code>. P>
blockQuote>
int * p code>, le * p code> nous donne une "image" d'une expression p < / code> sera utilisé. Le type réel de l'identifiant est dérivé de l'image: puisque * p code> est un int code>, puis p code> p code> est un pointeur à un int code>. p>
int x [2] code> nous dirait que x [2] code> est un int code>, donc x code> doit être un tableau de int code> et il doit avoir un membre avec index 2, il doit donc s'agir d'une matrice d'au moins 3 int code> . Au lieu de cela, il a été décidé que le déclarant contiendrait le nombre d'éléments au lieu de l'indice maximum. P>
Parce que 3 et 2 sont les tailles de l'autre utilisation, ce sont des index.
Dans
int Nums [3] [2] code>, le3 code> et2 code> ne sont pas des indices, ils sont des longueurs. Ils ne sont pas basés sur 1, car il n'y a pas d'indexation en cours. Ils ne sont pas à base de 0. Ce sont des valeurs de longueur simplement.Merci les gars. Je comprends ça maintenant.