Концепции C о массивах [закрыто]
Вопрос
int main(){
int arr[2]={30,40};
printf("%dn",i[arr]);
return 0;
}
Я нашел этот вопрос на экзамене, и данное решение - 40
Но я думаю, что это должно выдать ошибку, поскольку я не определен.Или, может быть, я что-то упускаю.Пожалуйста, объясните мне, почему 40 является правильным ответом?
Заранее спасибо.
Решение
Вы правы, код не так.Скорее всего, это опечатка, и намерение было либо определить генеракодицетагкод или использовать i
.
Другие советы
Вероятно, это ошибка, поскольку i
не определен.
Кроме того, вероятно, цель этого упражнения состоит в том, чтобы воспользоваться тем фактом, что в С, ты можешь написать v[ i ]
чтобы получить доступ к #я элемент вектора в, или i[ v ]
.
Обе формы эквивалентны. Поскольку v[ i ]
переводится как *( v + i )
, на самом деле нет никакой разницы между этим и *( i + v )
, который является то, что i[ v ]
переводится для.Это не распространенное использование, но, тем не менее, допустимо.
В этом конкретном примере 1[arr]
вернет ожидаемый ответ.
Мне просто интересно, почему они выбрали 40 вместо 42.
Надеюсь это поможет.
i
вероятно, предполагается, что ему будет присвоено значение 1 либо в устной части экзамена, либо в той части, которая отсутствует.Как написано, вопрос, конечно, неприменим, поскольку он не компилируется.
Настоящая суть вопроса состоит в том, чтобы проверить, понимает ли заявитель, что array[index]
эквивалентно index[array]
и (предположительно) почему.
В С array[index] = *(array + index) = *(index + array) = index[array]
.Предполагая i
быть 1
(иначе поведение не определено), 1[arr]
эквивалентно arr[1]
и он содержит значение 40
.
Хм, посмотрим, ладно...
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.
Да, в самом деле, i
является неопределенным.Вам либо нужно
int i = 1;
перед этим утверждением или это не i
, это 1
.Давайте попробуем это...
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
Это работает сейчас.