C'est le point de ISO : conversions standard: conversion de tableau-à-pointeur: 4,2,1 $ em> p>
Un lvalue ou rvalue de type "tableau
de n t "ou" éventail de liaison inconnue de
T "peut être converti en rvalue
de type "pointeur à T." Le résultat est
un pointeur sur le premier élément de
le tableau. p>
blockQuote>
Quelqu'un peut-il expliquer cela, si possible avec un exemple de programme. P>
J'ai déjà vu ces liens, mais je suis incapable de comprendre: p>
Je pense que j'ai peut-être proposé un exemple de rvalue de type de tableau p>
4 Réponses :
Un exemple de ceci est que toute variable de matrice dégénérera automatiquement dans un pointeur sur son premier élément lorsqu'il est passé à une fonction qui prend un pointeur du type de la matrice.
Regardez cette section de la FAQ C-FAQ sur tableaux et pointeurs . Ceci est également applicable en C ++. P>
void foo(int *a) {
a[0] = 1;
}
int main(void) {
int b[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
foo(b);
printf("b[0] == %d\n", b[0]);
}
en C et C ++, un tableau peut être utilisé comme s'il s'agissait d'un pointeur de son premier élément. Efficacement, donné une matrice nommée Voici comment l'abrégation est capable d'être utilisé avec des objets de tableau: p> C'est également la manière dont une matrice peut être transmise à une fonction qui a un paramètre de type pointeur: P> x code>, vous pouvez remplacer la plupart des utilisations de & x [0] code> avec juste x code>. void f(int* p);
int x[5];
f(x); // this is the same as f(&x[0])
x [2] est identique à * (& x [0] + 2); Voulez-vous dire x + 2 est la même chose que & x [0] + 2? Il y a un problème définissant les indicatifs en termes de & x [0] (qui est également sous-dominant).
Un autre tel contexte est lorsque la matrice est liée à une référence à la matrice. Acclamations,
@Fred: Ugh, c'était vraiment mauvais; Merci de le pointer. En fait, je voulais dire (& x [0]) [2] code>, puisque je tentais de montrer l'équivalence entre x code> et & x [0] code>. Votre exemple fonctionnerait aussi, cependant.
@Alf: Merci de me rappeler le problème de référence-à-table. Il y a aussi le cas lorsqu'un littéral à chaîne (qui est un tableau) est utilisé comme initialisateur. Avons-nous manqué d'autres cas ou est-ce que tous?
int a[6]; int *b = a; Pointer b points to the a[0], i.e. contains the address of the element a[0].
Cela signifie que vous pouvez avoir la situation suivante: Vous pouvez utiliser , puis le tableau sera le suivant: En outre, vous pouvez transmettre la matrice à une fonction, qui prend INT *: P> et appelez-le: p> arr code> comme pointeur sur int code>, quels points au premier élément de la matrice, par exemple: p> arr = {123, 666, ...} code > p> *( arr + 1 ) = 222;
Ok, d'accord, édité. Enlevé la partie avec "Nom du tableau", mon mauvais.