Russian Qt Forum
Ноябрь 23, 2024, 04:18
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Нюанс работы с массивами
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Нюанс работы с массивами (Прочитано 4480 раз)
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
Сообщений: 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
Гость
Re: Нюанс работы с массивами
«
Ответ #5 :
Сентябрь 18, 2007, 15:46 »
Просто массив - это не совсем массив
Почитайте про адресную арифметику
array[n] - это указатель на начало массива (array) + n*(sizeof(тип массива))
Т.е. при выполнении инструкции
a[100] = 'x';
программа просто вычислит адрес a + размер элемента * 100 и получит адрес в памяти, куда попробует записать Ваше значение. А вот удастся ей это или нет, зависит от конкретной ситуации.
Т.е. в принципе, все может пройти и гладко, если данный адрес, скажем находится в допустимых пределах - допустимых конкретной средой/операционной системой - и не принадлежит никому другому, но и в этом случае его просто кто-нибудь может его потом случайно перезаписать, но еще больше шанс, что указатель окажется вне допустимых пределов и программа рухнет.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...