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

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

Войти
Регистрация
Восстановить пароль
 
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
#1

Неверный размер массива. в чем ошибка? - C++

11.03.2010, 15:40. Просмотров 1050. Ответов 13
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int le( int array[]) {
      int i=0;
 while(array[i++]);
 return (i-1);
}
 
 
int main() {
 
 
 
    int a [10] = {1,2,3,4,5,6,7,8,9,10};
cout <<le(a)<<endl;
 
getch();
return 0;
}

выводит 25...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2010, 15:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Неверный размер массива. в чем ошибка? (C++):

Ошибка "неверный тип для индекса массива" при работе с двумерным массивом - C++
Возникла вот такая проблемы при выполнении работы: int step_right(int *a,int n,int m,int i,int j){ int flower = 0; if...

Два динамич. массива, размер увеличивается+1. MSVS ошибка - C++
полдня ломаю голову, не могу понять что не так и где что выходит, посмотрите, пожалуйста. Хуже то, что Code::Blocks работает, а VS2015...

Сортировка массива - в чем ошибка? - C++
Попытался написать код сортировки массива. Алгоритм такой: ищем самое маленькое число в массиве и помещаем в первый элемент массива, а...

Сортировка одномерного массива. В чем ошибка? - C++
Такая вот ошибка: ОС Windows инициировала точку останова в МояПрограмма.exe. Это может быть вызвано повреждением кучи и указывает на...

Сортировка одномерного массива выбором - в чем ошибка - C++
Всем привет. Пытаюсь написать алгоритм, который будет сортировать одномерный массив заданной длины: 1. находить минимум среди элементов, ...

В чем ошибка при передачи статического массива в функцию - C++
Не кидайте камни за использование глобальных переменных и статических двумерных массивов. Вроде все делаю по науке, вот так: ...

13
easybudda
Модератор
Эксперт CЭксперт С++
9718 / 5669 / 972
Регистрация: 25.07.2009
Сообщений: 10,915
11.03.2010, 15:49 #2
Krist_ALL, это строка нулём заканчивается. С обычным массивом в функцию надо и его размер передавать.
0
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
11.03.2010, 16:22  [ТС] #3
int числа
какой ноль?
и всерапвно 25 непойму откудо взелось
0
easybudda
Модератор
Эксперт CЭксперт С++
9718 / 5669 / 972
Регистрация: 25.07.2009
Сообщений: 10,915
11.03.2010, 17:48 #4
Цитата Сообщение от Krist_ALL Посмотреть сообщение
int числа
какой ноль?
Как по-вашему, когда этот
Цитата Сообщение от Krist_ALL Посмотреть сообщение
while(array[i++]);
цикл завершиться должен, и в array[i] что будет после выхода из него?
0
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
11.03.2010, 20:35  [ТС] #5
ничего не будет. array не изменяется.
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.03.2010, 20:47 #6
Krist_ALL, как уже сказал easybudda, нулем заканчиваются строки. Строка "abcd" на самом деле есть строка "abcd\0". Поэтому имея строку можно легко вычислить ее размер.

С массивами дела обстоят иначе. Невозможно вычислить размер массива, нужно этот размер "таскать" вместе с массивом.
0
M128K145
Эксперт С++
8305 / 3525 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
12.03.2010, 00:48 #7
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Невозможно вычислить размер массива
Неверное утверждение.
Для статических массивов
C++
1
int size = sizeof(mas)/sizeof(mas[0]);
Для динамических
C++
1
int size = _msize(mas)/sizeof(mas[0]);
0
easybudda
Модератор
Эксперт CЭксперт С++
9718 / 5669 / 972
Регистрация: 25.07.2009
Сообщений: 10,915
12.03.2010, 01:22 #8
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
int size = _msize(mas)/sizeof(mas[0]);
Одна беда: это самое _msize() - очередное мелкомягкое недоразумение, а не стандартная функция языка С/С++... Хотя, как можно динамически выделить память не зная, сколько её нужно, я, честно говоря, не представляю... Есть, конечно, тонкости, вроде strdup(), которая, что не удивительно, резервирует на байт больше, чем strlen() возвращает... А вообще, единственный случай, который могу себе представить, когда нужно как-то хитро размер массива узнавать, это когда он объявлен как-то так:
C
1
int arr[] = { 1, 2, 3, 4, 5, 6 };
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
12.03.2010, 13:39 #9
Цитата Сообщение от M128K145 Посмотреть сообщение
Неверное утверждение.
Имеется ввиду, что невозможно вычислить размер массива, переданного некой функции, так как массив передается как указатель на его первый элемент.
0
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
12.03.2010, 18:27  [ТС] #10
Имеется ввиду, что невозможно вычислить размер массива, переданного некой функции, так как массив передается как указатель на его первый элемент.
1- я этот пример взял из книжки
2 - Вот ситуация
----------------------------------------
я читаю строки из файла и загоняю их в массив
хочу вывести первую букву каждой строки.
for(i=0;i<[РАЗМЕР_МАССИВА];i++)
вот как узнать? я раньше кодил на пхп и отстутсвие функции определения размера массива меня тервожит..
Имеется ввиду, что невозможно вычислить размер массива, переданного некой функции, так как массив передается как указатель на его первый элемент.
[/QUOTE]
1- я этот пример взял из книжки
2 - как же тогда работает функция strlen?en?
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
12.03.2010, 20:11 #11
Цитата Сообщение от Krist_ALL Посмотреть сообщение
я этот пример взял из книжки
Скорее всего это плохая книга.
Цитата Сообщение от Krist_ALL Посмотреть сообщение
как же тогда работает функция strlen
Функция strlen принимает строку. И как уже говорилось выше строки заканчиваются нулевым символом.
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.03.2010, 20:15 #12
ХТО АВТОР, может в нете есть, скачаю посмотрю, как люди пишут книги.
0
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
15.03.2010, 15:54  [ТС] #13
почему
int array[10] = {0,1,2,3,4,5,6,7,8,9};
cout <<sizeof(array)/sizeof(int)<<endl;

выводит верный результат?

а когда передаю массив по указателю то нифига.

в маин функция сайзоф знает размер массива а в отделбной функции из параметра определить не может...
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.03.2010, 18:32 #14
Krist_ALL, потому что массив передается как указатель на первый элемент массива и когда ты с помощью sizeof пытаешься получить его размер, sizeof возвращает размер этого указателя.
0
15.03.2010, 18:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2010, 18:32
Привет! Вот еще темы с ответами:

первод массива char в массив int ( в чем ошибка?????) - C++
не могу понять почему не работает функция void StrToIntMass (int element, char buffer) { int k = 0,j = 0; char...

О чем говорит эта ошибка? Выход за пределы массива - C++
main.cpp invalid operands of types `int' and `int' to binary `operator+' вот сам код: #include &lt;cstdlib&gt; #include &lt;iostream&gt; ...

В чем заключается ошибка? Поиск минимального элемента двухмерного массива - C++
Здравствуйте! Есть массив 5 на 3( матрица), нужно найти значение минимальное, мне выводит ноль, не понимаю в чем тут ошибка. { ...

Ввести размер массива с клавиатуры и передать этот размер в конструктор - C++
Я создал массив объектов. И я хочу ввести размер этого массива с клавиатуры, и передать этот размер в конструктор, как мне это сделать? ...


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

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

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