Russian Qt Forum
Ноябрь 22, 2024, 23:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нюанс работы с массивами  (Прочитано 4473 раз)
lnkgyv
Гость
« : Июль 09, 2007, 15:10 »

Всем привет. Занимаюсь программированием давно, закончил технарь, счас програмлю на работе с помощью Qt4. Для поддержания "спортивной" формы в С++ перечитываю литературу, бывает что нахожу что-то новое. Записался на курсы дистанционного обучения на сайте intuit.ru. Там читал про массивы внимательно. На протяжении всей лекции они утверждают, к примеру:
int a[5]={1,2,3,4,5}; // например, если написать a[5]=2, то будет ошибка, по скольку есть выход за предел массива. Я у себя пишу с помощью GCC даный фрагмент и всё на ура. насколько я понимаю после даного примера у нас фактически есть не 5 элементов а 6 в массиве. В ихних тестах к лекции я выследил, что :
Они спрашивают, как распечатать все элементы массива int a[12].
Я отвечаю for(int i=0; i<=12; i++) cout<<a;
а правильный оказывается for(int i=0; i<12; i++) cout<<a;. Согласно ихнему ответу они не печатают тринадцатый єлемент. Я в замешательстве, хотя всё достаточно просто. пожалуйста разъясните ситуацию.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Июль 09, 2007, 16:44 »

Самое главное правило, все массивы в С++ начинаются с 0

int a[5]={1,2,3,4,5}; - 5 элементов в массиве
тоесть существуют a[0],...,a[4]
a[5]=2 - компилятор не ругнется - но это ошибка)
Записан
Вудруф
Гость
« Ответ #2 : Июль 10, 2007, 08:39 »

В массиве int a[] = {1,2,3,4,5} - 5 элементов
В массиве char a[] = "12345"; - 6 элементов (символы + \0)
Дополнительный символ появляется только в символьных массивах и только при объявлении именно строки (т.е. в кавычках).
Записан
lnkgyv
Гость
« Ответ #3 : Июль 10, 2007, 08:59 »

Цитата: "Admin"
Самое главное правило, все массивы в С++ начинаются с 0

int a[5]={1,2,3,4,5}; - 5 элементов в массиве
тоесть существуют a[0],...,a[4]
a[5]=2 - компилятор не ругнется - но это ошибка)

Спасибо за ответ! Хоть я и до сих пор не понимаю почему это ошибка. Я использовал на ура последний индекс. Но буду считать, что это аксиома языка С/С++ и использовать последний индекс не буду.
Записан
kitov
Гость
« Ответ #4 : Июль 10, 2007, 22:30 »

Это не последний индекс !!!
в массиве a[5] последний индекс 4 !!!
Записан
fightcat
Гость
« Ответ #5 : Сентябрь 18, 2007, 15:46 »

Просто массив - это не совсем массив  Смеющийся
Почитайте про адресную арифметику

array[n] - это указатель на начало массива (array) + n*(sizeof(тип массива))

Т.е. при выполнении инструкции
 a[100] = 'x';
программа просто вычислит адрес a + размер элемента * 100 и получит адрес в памяти, куда попробует записать Ваше значение. А вот удастся ей это или нет, зависит от конкретной ситуации.
Т.е. в принципе, все может пройти и гладко, если данный адрес, скажем находится в допустимых пределах - допустимых конкретной средой/операционной системой - и не принадлежит никому другому, но и в этом случае его просто кто-нибудь может его потом случайно перезаписать, но еще больше шанс, что указатель окажется вне допустимых пределов и программа рухнет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 22.