Из стенфордской лекции
//подсмотрено из стенфордской лекции
#include <stdio.h>
int main(){
int arr[4];
int i;
for (i=0; i<=4; i++){
printf("%i\n", i);
arr[i]-=4;
}
return 0;
}
Вопрос: что выведет программа?
Зараз перевірю.
bunyk
23.02.2011 в 15:20
ответ неправильный, но лучше не проверяй, а подумай еще
jtimv
23.02.2011 в 15:23
Точно так, тільки без останнього матюка.
bunyk
23.02.2011 в 15:24
ORLY? Ты опять ошибся…
jtimv
23.02.2011 в 15:27
YARLY:
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
bunyk
23.02.2011 в 15:31
OMG. Треба повернутись до 32-х розрядної системи.
bunyk
23.02.2011 в 15:53
На всякий случай (вдруг кроме меня и тебя это кто-то читает), напишу нормально.
Т.к. у bunyk’а система 64-битная, то “трюк” не сработал.
В случае 32-битной системы данные будут расположены в памяти следующим образом:
a[0] a[1] a[2] a[3] i
и &[4] == &i, а поэтому и a[4]-=4 эквивалентно i-=4.
Т.е. будет бесконечный цикл.
Если система 64-битная, то данные будут расположены примерно так:
a[0] a[1] a[2] a[3] _s_p_a_c_e i
т.е. a[4] будет действительно указывать на мусор. Но если поменять 4 на 3, то будет уже “нормальная” картина:
a[0] a[1] a[2] i
jtimv
23.02.2011 в 20:18