Question

int main(){

    int arr[2]={30,40};
    printf("%dn",i[arr]);
    return 0;
}

J'ai trouvé cette question par un examen et la solution donnée est 40

Mais je pense qu'il devrait donner une erreur car je n'est pas défini.Ou, peut-être que je suis absent quelque chose.Merci de m'expliquer comment 40 est la bonne réponse?

Merci à l'avance.

Était-ce utile?

La solution

Vous êtes correct, le code est faux.Probablement, c'est une faute de frappe, et l'intention était soit de définir i ni d'utiliser 1[arr].

Autres conseils

C'est probablement une erreur, puisque i n'est pas définie.

Aussi, probablement l'intention de cet exercice est de profiter du fait que, dans C, vous pouvez écrire v[ i ] afin d'accéder à l' #j' élément d'un vecteur v, ou i[ v ].

Les deux formes sont équivalentes.Depuis v[ i ] est traduit comme *( v + i ), il est en fait pas la différence entre ça et *( i + v ), qui est ce i[ v ] est traduit pour.Ce n'est pas une utilisation courante, mais est néanmoins valide.

Les tableaux en C, à partir de Wikipedia

Dans cet exemple précis, 1[arr] serait de retour à la réponse attendue.

Je me demande juste pourquoi ils ont choisi de 40 au lieu de 42.

Espérons que cette aide.

i est probablement censé être donné comme 1, soit dans la partie parlée de l'examen, ou dans une partie qui est manquant.Comme l'écrit, la question n'est évidemment pas applicable puisque cela ne compile pas.

Le vrai point de la question est pour tester si le demandeur est informé que array[index] est équivalent à index[array] et (sans doute) pourquoi.

En C array[index] = *(array + index) = *(index + array) = index[array].En supposant que i pour être 1 (sinon le comportement est indéfini), 1[arr] est équivalent à arr[1] et il contient une valeur 40.

Hmm, voyons nous...

matilda:~ jeremyp$ cat > foo.c
int main(){

    int arr[2]={30,40};
    printf("%dn",i[arr]);
    return 0;
}
matilda:~ jeremyp$ cc foo.c
foo.c:4:5: warning: implicitly declaring library function 'printf' with type 'int (const char *, ...)'
    printf("%dn",i[arr]);
    ^
foo.c:4:5: note: please include the header <stdio.h> or explicitly provide a declaration for 'printf'
foo.c:4:18: error: use of undeclared identifier 'i'
    printf("%dn",i[arr]);
                 ^
1 warning and 1 error generated.

Oui en effet, i n'est pas défini.Vous avez besoin

int i = 1;

avant cette déclaration ou ce n'est pas un i, c'est un 1.Nous allons essayer ça...

matilda:~ jeremyp$ cat >foo.c
#include <stdio.h> // Stops the warning
int main(){

    int arr[2]={30,40};
    printf("%d\n",1[arr]); // Also added a \ so we get a line feed.
    return 0;
}
matilda:~ jeremyp$ cc foo.c
matilda:~ jeremyp$ ./a.out
40

Qui fonctionne maintenant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top