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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
Dz_ViTo
 Аватар для Dz_ViTo
14 / 0 / 0
Регистрация: 14.07.2011
Сообщений: 51
13.08.2011, 03:21     Границы массива #1
Пришла ночью дурная идея... как определить конец массива:
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 байта и дает мне все что там есть
Может кто знает , дайте ответ =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2011, 03:21     Границы массива
Посмотрите здесь:

C++ Границы массива
границы рандомизации C++
C++ Проверить на выход за границы массива
Выход за границы массива C++
Индекс находился вне границы массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
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 );
Mayonez
13.08.2011, 14:04
  #3

Не по теме:

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

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

Добавлено через 1 минуту
и не A[0], a &A[0]
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
13.08.2011, 17:51     Границы массива #9
Цитата Сообщение от Mayonez Посмотреть сообщение
считается дурным тоном (зачем 4 лишних символа писать???)
Кем считается? Вот захочется массив вектором заменить... Не в этой задаче, конечно
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
13.08.2011, 18:13     Границы массива #10
Цитата Сообщение от grizlik78 Посмотреть сообщение
Кем считается?
Шилдтом
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.08.2011, 18:20     Границы массива #11
Цитата Сообщение от Mayonez Посмотреть сообщение
считается дурным тоном (зачем 4 лишних символа писать???)
Что бы было более читабельно.
silentnuke
13.08.2011, 20:31
  #12

Не по теме:

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

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

Не по теме:

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

CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.08.2011, 00:40     Границы массива #15
Цитата Сообщение от asics Посмотреть сообщение
Однако в профессионально написаных программах на С/C++ вы никогда не встретите выражение &sample[0]
В профессионально написанных программах на C/C++ вы не встретите массивы вообще, за исключениям, разве что, низкоуровневых конструкций.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
14.08.2011, 01:01     Границы массива #16
CyBOSSeR, Ну...Шилдт же тоже не мальчик, что-то знает, что-то выдел...
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.08.2011, 01:18     Границы массива #17
Цитата Сообщение от asics Посмотреть сообщение
CyBOSSeR, Ну...Шилдт же тоже не мальчик, что-то знает, что-то выдел...
Шилдт может и не мальчик и что-то видел, но использование массивов в профессиональном ПО на C++ встречается очень редко, поэтому не важно как получается адрес первого элемента.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
14.08.2011, 01:24     Границы массива #18
Я конечно уважаю ваше мнение, но Шилдт есть Шилдт, его слово против вашего, сами понимаете...
Dz_ViTo
 Аватар для Dz_ViTo
14 / 0 / 0
Регистрация: 14.07.2011
Сообщений: 51
15.08.2011, 14:37  [ТС]     Границы массива #19
Нет массивов? Интересно... а если есть база данных? чем тогда поьзоватся?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2011, 14:57     Границы массива
Еще ссылки по теме:

C++ Создайте класс динамического массива, в котором реализована проверка выхода за границы массива
Реализация защиты выхода за границы массива C++
C++ При вызове функции необработанное исключение, выход за границы массива

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

Или воспользуйтесь поиском по форуму:
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
15.08.2011, 14:57     Границы массива #20
Цитата Сообщение от Dz_ViTo Посмотреть сообщение
Нет массивов? Интересно... а если есть база данных? чем тогда поьзоватся?
контейнеры есть=)
Yandex
Объявления
15.08.2011, 14:57     Границы массива
Ответ Создать тему
Опции темы

Текущее время: 08:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru