Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
Dz_ViTo
14 / 0 / 0
Регистрация: 14.07.2011
Сообщений: 51
#1

Границы массива - C++

13.08.2011, 03:21. Просмотров 2599. Ответов 21
Метки нет (Все метки)

Пришла ночью дурная идея... как определить конец массива:
C++
1
2
3
4
5
6
7
8
9
10
11
int main(int argc, char *argv[]){
    int *p, A[]={1, 2, 3};
    p = &A[0];
    while(p != NULL){
     cout<< *p<< endl;
     p++;
     getch();
    } 
    system("PAUSE");
    return EXIT_SUCCESS;
}
но... конца массива не видно, и он долбит память дальше по 4 байта и дает мне все что там есть
Может кто знает , дайте ответ =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2011, 03:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Границы массива (C++):

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива - C++
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива. Перегрузите операторы: , =, +, -,++...

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива - C++
Народ подскажите такую вещь я написал программку для вставки элементов в массив при этом осуществляется проверка границ массива ! ...

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива - C++
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива. Перегрузите операторы: , =, +, -,++ ...

Границы массива - C++
Подскажите пожалуйста, что надо изменить в программке, чтобы &quot;Т&quot; не выходила за границы массива. Спасибо! #include &lt;iostream&gt; //...

Выход за границы массива - C++
Выхожу за пределы массива, но вот только не понимаю как. #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; const...

Не могу установить границы массива - C++
Добрый день! Код имитирует работу стека. #include&lt;iostream&gt; using namespace std; class Stack { protected:

21
Сыроежка
Заблокирован
13.08.2011, 03:33 #2
Цитата Сообщение от Dz_ViTo Посмотреть сообщение
Пришла ночью дурная идея... как определить конец массива:
C++
1
2
3
4
5
6
7
8
9
10
11
int main(int argc, char *argv[]){
    int *p, A[]={1, 2, 3};
    p = &A[0];
    while(p != NULL){
     cout<< *p<< endl;
     p++;
     getch();
    } 
    system("PAUSE");
    return EXIT_SUCCESS;
}
но... конца массива не видно, и он долбит память дальше по 4 байта и дает мне все что там есть
Может кто знает , дайте ответ =)
Размер массива можно определить посредством деления размера всего массива на размер его элемента.

C++
1
sizeof( A ) / sizeof( *A )
либо эквивалентное выражение

C++
1
sizeof( A ) / sizeof( A[0] )
Если вы работаете в С++, то можно использовать следующую простую шаблонную функцию, которая возвращает размер массива

C++
1
2
3
4
5
template <typename T. size_t N>
inline size_t size( const T ( & )[N] )
{
   return ( N );
}
Тогда просто можете записать size_t len = size( A );
1
Mayonez
13.08.2011, 14:04
  #3

Не по теме:

Цитата Сообщение от Dz_ViTo Посмотреть сообщение
C++
1
p = &A[0];
нееееееееееееееееееееееет

0
Dz_ViTo
14 / 0 / 0
Регистрация: 14.07.2011
Сообщений: 51
13.08.2011, 16:55  [ТС] #4
Mayonez , а почему нет?
А и А[0] ето один и тот же адрес
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
13.08.2011, 17:12 #5
Цитата Сообщение от Dz_ViTo Посмотреть сообщение
но... конца массива не видно
оно и не должно было работать.
Цитата Сообщение от Dz_ViTo Посмотреть сообщение
А и А[0] ето один и тот же адрес
В данном случае A - это указатель (адрес) на первый элемент массива, а А[0] - собственно, сам первый элемент массива.
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
13.08.2011, 17:32 #6
C++
1
2
3
for (int i=0;i<2;i++){
cout (*p+i);             \\ или *(p+i) не помню 
}
а не проще ли
0
Dz_ViTo
14 / 0 / 0
Регистрация: 14.07.2011
Сообщений: 51
13.08.2011, 17:41  [ТС] #7
Nameless One, я имел ввиду &A[0]
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
13.08.2011, 17:47 #8
Цитата Сообщение от Dz_ViTo Посмотреть сообщение
Mayonez , а почему нет?
А и А[0] ето один и тот же адрес
считается дурным тоном (зачем 4 лишних символа писать???)

Добавлено через 1 минуту
и не A[0], a &A[0]
0
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
13.08.2011, 17:51 #9
Цитата Сообщение от Mayonez Посмотреть сообщение
считается дурным тоном (зачем 4 лишних символа писать???)
Кем считается? Вот захочется массив вектором заменить... Не в этой задаче, конечно
1
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
13.08.2011, 18:13 #10
Цитата Сообщение от grizlik78 Посмотреть сообщение
Кем считается?
Шилдтом
1
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.08.2011, 18:20 #11
Цитата Сообщение от Mayonez Посмотреть сообщение
считается дурным тоном (зачем 4 лишних символа писать???)
Что бы было более читабельно.
0
silentnuke
13.08.2011, 20:31
  #12

Не по теме:

Цитата Сообщение от Mayonez Посмотреть сообщение
Шилдтом
оО, где вы у него такое нашли?

0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
13.08.2011, 23:50 #13
Цитата Сообщение от silentnuke Посмотреть сообщение
оО, где вы у него такое нашли?
Герберт Шилдт - Полный справочник по C++. ст. 102
Однако в профессионально написаных программах на С/C++ вы никогда не встретите выражение &sample[0]
0
silentnuke
14.08.2011, 00:00
  #14

Не по теме:

Цитата Сообщение от asics Посмотреть сообщение
Герберт Шилдт - Полный справочник по C++. ст. 102
не правда, ст. 101

0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.08.2011, 00:40 #15
Цитата Сообщение от asics Посмотреть сообщение
Однако в профессионально написаных программах на С/C++ вы никогда не встретите выражение &sample[0]
В профессионально написанных программах на C/C++ вы не встретите массивы вообще, за исключениям, разве что, низкоуровневых конструкций.
0
14.08.2011, 00:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2011, 00:40
Привет! Вот еще темы с ответами:

Проверить на выход за границы массива - C++
ПРивет, помогите пожалуйста, пишу класс - динамический массив, в перегрузке оператора нужно проверить на выход за границы, но не знаю как...

Реализация защиты выхода за границы массива - C++
Доброго времени! Прошу помочь разобраться с вопросом возникшим, при изучении C++. Я только начинаю изучать язык и ни как не могу понять вот...

Индекс находился вне границы массива - C++
Подскажите , что сделано не так , если при вводе значения больше 2-ух , он выдает ошибку &quot;Индекс находился вне границы массива&quot;. ...

Массивы: Проверка на выход за границы массива - C++
Здравствуйте! Пишу код хождения коня по шахматной доске. Конь пока стоит на одном месте и ходит по кругу. Как можно реализовать проверку на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru