Вопрос

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 ] переводится для.Это не распространенное использование, но, тем не менее, допустимо.

Массивы в C из Википедии.

В этом конкретном примере 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

Это работает сейчас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top