C conceitos de matrizes [fechado]
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.
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.