В споре рождается истина

- А я так не думаю!

Из стенфордской лекции

с 7 комментариями

//подсмотрено из стенфордской лекции
#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;
}

Вопрос: что выведет программа?

Написано jtimv

22.02.2011 в 20:20

Опубликовано в Программирование

Комментариев: 7

Подписаться на комментарии по RSS.

  1. 0
    1
    2
    3
    4
    Segmentation fault, чи щось типу того.
    

    Зараз перевірю.

    bunyk

    23.02.2011 в 15:20

    • ответ неправильный, но лучше не проверяй, а подумай еще

      jtimv

      23.02.2011 в 15:23

  2. Точно так, тільки без останнього матюка.

    bunyk

    23.02.2011 в 15:24

  3. OMG. Треба повернутись до 32-х розрядної системи.

    bunyk

    23.02.2011 в 15:53

  4. На всякий случай (вдруг кроме меня и тебя это кто-то читает), напишу нормально.
    Т.к. у 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


Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

Follow

Get every new post delivered to your Inbox.