Название: Нюанс работы с массивами Отправлено: 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 от Июль 09, 2007, 16:44 Самое главное правило, все массивы в С++ начинаются с 0
int a[5]={1,2,3,4,5}; - 5 элементов в массиве тоесть существуют a[0],...,a[4] a[5]=2 - компилятор не ругнется - но это ошибка) Название: Нюанс работы с массивами Отправлено: Вудруф от Июль 10, 2007, 08:39 В массиве int a[] = {1,2,3,4,5} - 5 элементов
В массиве char a[] = "12345"; - 6 элементов (символы + \0) Дополнительный символ появляется только в символьных массивах и только при объявлении именно строки (т.е. в кавычках). Название: Нюанс работы с массивами Отправлено: lnkgyv от Июль 10, 2007, 08:59 Цитата: "Admin" Самое главное правило, все массивы в С++ начинаются с 0 int a[5]={1,2,3,4,5}; - 5 элементов в массиве тоесть существуют a[0],...,a[4] a[5]=2 - компилятор не ругнется - но это ошибка) Спасибо за ответ! Хоть я и до сих пор не понимаю почему это ошибка. Я использовал на ура последний индекс. Но буду считать, что это аксиома языка С/С++ и использовать последний индекс не буду. Название: Нюанс работы с массивами Отправлено: kitov от Июль 10, 2007, 22:30 Это не последний индекс !!!
в массиве a[5] последний индекс 4 !!! Название: Re: Нюанс работы с массивами Отправлено: fightcat от Сентябрь 18, 2007, 15:46 Просто массив - это не совсем массив ;D
Почитайте про адресную арифметику array[n] - это указатель на начало массива (array) + n*(sizeof(тип массива)) Т.е. при выполнении инструкции a[100] = 'x'; программа просто вычислит адрес a + размер элемента * 100 и получит адрес в памяти, куда попробует записать Ваше значение. А вот удастся ей это или нет, зависит от конкретной ситуации. Т.е. в принципе, все может пройти и гладко, если данный адрес, скажем находится в допустимых пределах - допустимых конкретной средой/операционной системой - и не принадлежит никому другому, но и в этом случае его просто кто-нибудь может его потом случайно перезаписать, но еще больше шанс, что указатель окажется вне допустимых пределов и программа рухнет. |