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

Создать одномерный массив с числом элементов как у исходного - C++

Восстановить пароль Регистрация
 
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
14.05.2012, 01:52     Создать одномерный массив с числом элементов как у исходного #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 void new_arr(int size)
  {
    int *B=new int[size];
      cout<<sizeof(B)/sizeof(int) // =1 элемент
    delete[size]B;
  }
 
void main()
 {
   const N=100;
   int A[N];     
   cout<<sizeof(A)/sizeof(int)<<endl; //=100 элементов
   new_arr(N); //пытаюсь создать массив с такой же размерностью
 }
Пытался создать массив на основе исходного, нужно чтобы количество элементов в массиве B стало таким же как число элементов в массиве A. Я думал, что прописывая размер, в массив должно выделиться столько байт, сколько я указал, но что-то я не понимаю почему тогда разное число элементов у массивов выходит при этом коде.

Подскажите как правильно решить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 01:52     Создать одномерный массив с числом элементов как у исходного
Посмотрите здесь:

Создать одномерный массив, содержащий индексы элементов матрицы C++
Создать массив, каждый элемент которого содержит сумму делителей элементов исходного массива C++
Создать новый массив из различных элементов исходного массива C++
C++ Создать массив из различных элементов исходного
C++ создать динамический одномерный массив,содержащий x числовых элементов .
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
14.05.2012, 02:00     Создать одномерный массив с числом элементов как у исходного #2
При применении sizeof к имени статического массива, возвращается размер в байтах всего массива. При применении к указателям, возвращается размер самого указателя. При очистке динамически выделенной памяти, не нужно указывать размер массива, квадратные скобки нужны лишь для указания, что удаляется массив данных. То есть просто нужно писать
C++
1
delete [] B;
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
14.05.2012, 02:57  [ТС]     Создать одномерный массив с числом элементов как у исходного #3
Toshkarik , хорошо только имя массива это ведь тоже указатель, поэтому по логике не должно быть разницы. Ведь Определение Указатель=определение Указатель. Парадокс получается, что обращаясь к одному и тому же я должен получать разные ответы

Увы ответа тут и близко нет

Добавлено через 39 минут
Больше наводка чем ответ
sizeof(указатель) == кол-во байт нужных для хранения самого Указателя на текущей платформе(не размер области на которую он указывает)
sizeof(массив) == кол-во байт нужных для хранения содержимого Данного массива

то же, что вы сказали, просто понятнее написано

Хотя и не понимаю почему, но это ладно. Я никак не смогу узнать количество байт для хранения содержимого в массиве B ?
Я понимаю, что выделил size байт и всегда к этому size могу обратиться, а вот если опустить этот size байт и попробовать их вычислить, то такого способа нет?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
14.05.2012, 03:33     Создать одномерный массив с числом элементов как у исходного #4
Имя статического массива имеет лишь природу поведения константного указателя на первый элемент. Размер статического массива известен на этапе компиляции. Операция sizeof выполняется во время компилирования, то есть это операция времени компиляции а не исполнения. При компиляции просто будут подставлены значения которые вернула sizeof для той системы, для которой происходит компиляция. Размер же динамических данных может изменятся не один раз во время выполнения программы.

Добавлено через 1 минуту
Цитата Сообщение от daslex Посмотреть сообщение
то такого способа нет?
Нет конечно, Вы должны знать, сколько Вы выделяете памяти. В данном случае будет выделено size * sizeof( int ) байт.
Yandex
Объявления
14.05.2012, 03:33     Создать одномерный массив с числом элементов как у исходного
Ответ Создать тему
Опции темы

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