Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> инициализация массивов 
:(
    Опции темы
ShadowC
Дата 16.9.2011, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 23.6.2011

Репутация: нет
Всего: нет



вообщем суть вопроса вот в чем,число в квадратных скобках это колличество элементов массивов,тоесть обьявление int x[6]; означает что в массиве 6 ячеек под 6 целых чисел,но как бы не так. если инициализировать все элементы массива в объявление,тоесть

Код

int x[6]={7,7,2,6,78,9};

то попытка вставить туда 7 элемент массива приводит к ошибке компиляции,но если поступить так

Код

int x[6]={7,7,2,6,78,9};
x[6]=75;


тоесть явно инициализировать уже 7-ой элемент массива,то компилятор не выдает ошибку,ну покрайнемере Dev-C++.

и код

Код

int main()
{
int x[6]={8,9,5,3,5,7};
x[6]=75;
for(int i=0;i<7;i++)
cout<<x[i]<<endl;
system("PAUSE");
return 0;
}

выведет все 7 элементов массивов тоесть x[0]-x[6]

в следствие чего у меня вопрос,это нормально или это баг компилятора.
PM MAIL   Вверх
mes
Дата 16.9.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



это баг программиста.. т.е. Ваш.. 



--------------------
PM MAIL WWW   Вверх
newbee
Дата 16.9.2011, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Цитата(ShadowC @  16.9.2011,  15:11 Найти цитируемый пост)
то попытка вставить туда 7 элемент массива приводит к ошибке компиляции
Что вполне естественно.

Цитата(ShadowC @  16.9.2011,  15:11 Найти цитируемый пост)
тоесть явно инициализировать уже 7-ой элемент массива,то компилятор не выдает ошибку,ну покрайнемере Dev-C++.
А тут компилятор уже забывает, сколько у него элементов в массиве х.

Цитата(ShadowC @  16.9.2011,  15:11 Найти цитируемый пост)
в следствие чего у меня вопрос,это нормально или это баг компилятора. 
Это нормальное поведенеи компилятора и ненормальное - программиста. Вылезая за границы массива ты в лучшем случае вылезешь за отведенное программе место, и она упадет, в худшем - попортишь свои же данные, которые лежат в памяти за массивом.


--------------------
You're face to face
With man who sold the world
PM   Вверх
Mikron
Дата 16.9.2011, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Код

x[6]=75;

это *(x+6)=75 
записать в такую-то ячейку памяти 75, обычная операция, здесь нет ошибки
но по этому адресу может быть расположено что-то нужное, и так делать нельзя
PM MAIL   Вверх
ShadowC
Дата 16.9.2011, 14:34 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 23.6.2011

Репутация: нет
Всего: нет



Цитата(Mikron @ 16.9.2011,  14:31)
Код

x[6]=75;

это *(x+6)=75 
записать в такую-то ячейку памяти 75, обычная операция, здесь нет ошибки
но по этому адресу может быть расположено что-то нужное, и так делать нельзя

в том-то и дело что по этому адресу не может находится ничего нужного,т.к 6 элементов в массиве x[6] это элементы от 0 до 5 и если не инициализировать x[6] явным образом,то его как бы и не существует
PM MAIL   Вверх
Mikron
Дата 16.9.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Цитата(ShadowC @  16.9.2011,  14:34 Найти цитируемый пост)
в том-то и дело что по этому адресу не может находится ничего нужного,т.к 6 элементов в массиве x[6] это элементы от 0 до 5 и если не инициализировать x[6] явным образом,то его как бы и не существует 

не понял чего не существует(
по адресу *(x+6) что-то уже записано, или может быть записано, и вы не можете с этой памятью работать, она не ваша

Это сообщение отредактировал(а) Mikron - 16.9.2011, 14:46
PM MAIL   Вверх
BrAgOl
Дата 16.9.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 6.3.2005
Где: М.О.

Репутация: нет
Всего: нет



А зачем вам это делать??? int x[6] это массив состоящий из элементов x[0] x[1] x[2] x[3] x[4] x[5]

х[6] это за пределами объявленного вами массива, там может храниться что угодно, а может и не храниться


ЗЫ если не прав, поправьте
PM MAIL   Вверх
ShadowC
Дата 16.9.2011, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 23.6.2011

Репутация: нет
Всего: нет



Цитата(Mikron @ 16.9.2011,  14:42)
Цитата(ShadowC @  16.9.2011,  14:34 Найти цитируемый пост)
в том-то и дело что по этому адресу не может находится ничего нужного,т.к 6 элементов в массиве x[6] это элементы от 0 до 5 и если не инициализировать x[6] явным образом,то его как бы и не существует 

не понял чего не существует(
по адресу *(x+6) что-то уже записано, и вы не можете с этой памятью работать

да блин,в массиве x[6] есть 6 ячеек памяти в которые можно записать информацию это x[0],x[1],x[2],x[3],x[4],x[5] ,а x[6] это уже 7-ой элемент массива тоесть это как бы и нет...
PM MAIL   Вверх
Mikron
Дата 16.9.2011, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Цитата(ShadowC @  16.9.2011,  14:50 Найти цитируемый пост)

да блин,в массиве x[6] есть 6 ячеек памяти в которые можно записать информацию это x[0],x[1],x[2],x[3],x[4],x[5] ,а x[6] это уже 7-ой элемент массива тоесть это как бы и нет... 

x[6] - это не элемент массива, это адрес, по которому вы пишите что-то, но по этому адресу уже может быть что-то записано


PM MAIL   Вверх
newbee
Дата 16.9.2011, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Цитата(Mikron @  16.9.2011,  15:55 Найти цитируемый пост)
x[6] - это не элемент массива, это адрес, по которому вы пишите что-то
Ващета это не адрес, а значение.

ShadowC, пока просто возьми за правило не лезть за границы массива. Потом поймешь.


--------------------
You're face to face
With man who sold the world
PM   Вверх
Mikron
Дата 16.9.2011, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 2.5.2007

Репутация: нет
Всего: нет



Цитата(newbee @  16.9.2011,  14:57 Найти цитируемый пост)
Ващета это не адрес, а значение.

Код

x[6]=75;

так адрес
a=x[6] так значение)
PM MAIL   Вверх
bems
Дата 16.9.2011, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



а включить проверку на выход за границы разве нельзя?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
newbee
Дата 16.9.2011, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Цитата(Mikron @ 16.9.2011,  16:01)
Цитата(newbee @  16.9.2011,  14:57 Найти цитируемый пост)
Ващета это не адрес, а значение.

Код

x[6]=75;

так адрес
a=x[6] так значение)

x+6 - так адрес! А x[6] или *(x+6) - значение!

Тоже мне, советчик.


--------------------
You're face to face
With man who sold the world
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0748 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.