Pergunta

int main(){

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

Achei esta pergunta em um exame e a solução é dada 40

Mas eu acho que deve dar um erro, pois eu é indefinido.Ou, pode ser que eu estou faltando alguma coisa.Por favor, explique-me como 40 é a resposta correta?

Obrigado antecipadamente.

Foi útil?

Solução

Você está correto, o código é errado.Provavelmente, é um erro de digitação, e a intenção era definir i ou para usar 1[arr].

Outras dicas

Provavelmente é um erro, já que i não está definido.

Também, provavelmente, a intenção do exercício é tirar vantagem do fato de que, em C, você pode escrever v[ i ] para acessar a #eu elemento de um vetor v, ou i[ v ].

Ambas as formas são equivalentes.Desde v[ i ] é traduzido como *( v + i ), há, na verdade, não de qualquer diferença entre essa e *( i + v ), que é o que i[ v ] é traduzido para.Este não é um uso comum, porém é válido.

Matrizes em C, a partir de Taxas

Neste exemplo específico, 1[arr] gostaria de retornar a resposta esperada.

Eu só me pergunto por que escolheu 40 em vez de 42.

Espero que isso ajude.

i é, provavelmente, deveria ser dado como 1, no falada parte do exame, ou na parte que está faltando.Como está escrito, a pergunta é, claro, inaplicável, pois não compilar.

O verdadeiro ponto da questão é para testar se a requerente entende que array[index] é equivalente a index[array] e (presumivelmente) o porquê.

Em C array[index] = *(array + index) = *(index + array) = index[array].Supondo i para ser 1 (caso contrário, o comportamento é indefinido), 1[arr] é equivalente a arr[1] e ele contém o valor 40.

Hmm, vamos ver vamos...

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.

Sim, de fato, i é indefinido.Você nem precisa de

int i = 1;

antes de que a instrução ou não um i, é um 1.Vamos tentar...

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

Que funciona agora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top