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

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

Войти
Регистрация
Восстановить пароль
 
daslex
1259 / 504 / 104
Регистрация: 02.08.2011
Сообщений: 2,553
#1

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

14.05.2012, 01:52. Просмотров 398. Ответов 3
Метки нет (Все метки)

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++ Создать массив из различных элементов исходного
Одномерный массив. Создать массив Х суммы среднеарифметического элементов массива А с каждым элементом массива А C++
Создать новый одномерный массив, состоящий из произведений элементов матрицы А(6,4) по столбцам C++
Создать массив из элементов исходного файла, внеся в него числа, превосходящие среднее значение C++
C++ Создать массив состоящий из различных элементов исходного массива
Создать одномерный массив из сумм положительных элементов каждого столбца матрицы C++
Создать одномерный массив из сумм положительных элементов каждого столбца матрицы C++
На основе исходного файла создать массив удвоенных нечётных чисел и упорядочить его по возрастанию элементов C++

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

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

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

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

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

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

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

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