Главная / Программирование /
VBA в MS Office 2007 / Тест 8
Упражнение 1:
Номер 1
Укажите тип цикла, который позволяет осуществлять проход по каждому члену коллекции
Ответ:
(1) For Each… Next
(2) For… Next
(3) If… then… else
(4) Do… Loop
Номер 2
Укажите тип цикла, который позволяет выполнять цикл до тех пор, пока логическое условие на выходе из цикла верно.
Ответ:
(1) For Each… Next
(2) For… Next
(3) If… then… else
(4) Do… Loop
Номер 3
Укажите тип цикла, который выполняется до тех пор, пока счетчик цикла не достигнет заданного значения.
Ответ:
(1) For Each… Next
(2) For… Next
(3) If… then… else
(4) Do… Loop
Упражнение 2:
Номер 1
Укажите оператор, который позволяет выполнить один из двух фрагментов кода на основе результата логической проверки условия
Ответ:
(1) Goto line
(2) For… Next
(3) If… then… else
(4) Select Case ... End Select
Номер 2
Укажите оператор, который позволяет выполнить безусловный переход на указанную при вызове оператора метку строки
Ответ:
(1) Goto line
(2) For… Next
(3) If… then… else
(4) Select Case ... End Select
Номер 3
Укажите оператор, который позволяет выполнить один из множества фрагментов кода на основе результата логической проверки условия
Ответ:
(1) Goto line
(2) For… Next
(3) If… then… else
(4) Select Case ... End Select
Упражнение 3:
Номер 1
Укажите команду, создающую новую папку
Ответ:
(1) ChDir
(2) CurDir
(3) MkDir
(4) RmDir
Номер 2
Укажите команду, позволяющую изменить текущую папку
Ответ:
(1) ChDir
(2) CurDir
(3) MkDir
(4) RmDir
Номер 3
Укажите команду, позволяющую удалить папку
Ответ:
(1) ChDir
(2) CurDir
(3) MkDir
(4) RmDir
Упражнение 4:
Номер 1
Каким образом по умолчанию нумеруются элементы массива?
Ответ:
(1) первый элемент получает номер 1, второй – 2 и т.д
(2) первый элемент получает номер 0, второй – 1 и т.д
(3) первый элемент получает номер, соответствующий числовому представлению имени массива, второй – на 1 больше и т.д
(4) первый элемент получает номер -1, второй – 0 и т.д
Номер 2
Можно ли задать нумерацию всех массивов начинающейся с 1?
Ответ:
(1) в этом нет необходимости – массивы по умолчанию нумеруются с 1
(2) да, можно – используя команду Option Base 1 на уровне модуля
(3) нет, это невозможно
(4) это можно сделать, лишь явно указав номер первого элемента массива при объявлении, других способов нет
Номер 3
Можно ли задать нумерацию элементов массива явно?
Ответ:
(1) нет, нельзя
(2) да – можно, но лишь после того, как массив будет заполнен значениями
(3) да – можно, используя ключевое слово To при объявлении массива
(4) да – можно, но лишь в том случае, если массив имеет тип Variant
Упражнение 5:
Номер 1
С чем можно сравнить трехмерный массив?
Ответ:
(1) с обычной таблицей, имеющей строки и столбцы, заполненные данными
(2) с одной строкой обычной таблицы
(3) с набором таблиц
(4) с неупорядоченным набором значений
Номер 2
С чем можно сравнить двумерный массив?
Ответ:
(1) с обычной таблицей, имеющей строки и столбцы, заполненные данными
(2) с одной строкой обычной таблицы
(3) с набором таблиц
(4) с неупорядоченным набором значений
Номер 3
С чем можно сравнить одномерный массив?
Ответ:
(1) с обычной таблицей, имеющей строки и столбцы, заполненные данными
(2) с одной строкой обычной таблицы
(3) с набором таблиц
(4) с неупорядоченным набором значений
Упражнение 6:
Номер 1
Можно ли изменить размерность массива после того, как он объявлен?
Ответ:
(1) нет, это невозможно
(2) можно, обратившись к элементу массива, индекс которого превышает размерность массива
(3) можно, воспользовавшись командой ReDim
(4) можно, воспользовавшись командой Dim
Номер 2
Если применить команду Nothing к объектному массиву, какое значение получат его элементы?
Ответ:
(1) Null
(2) 0
(3) Nothing
(4) "" (пустая строка)
Номер 3
Зачем нужна функция IsArray
Ответ:
(1) она позволяет узнать размерность массива
(2) она позволяет узнать, является ли переменная массивом
(3) она позволяет изменить размерность массива
(4) она позволяет быстро заполнить массив
Упражнение 7:
Номер 1
Какой оператор используется для сравнения строки с шаблоном?
Ответ:
(1) Or
(2) Like
(3) And
(4) =
Номер 2
Какой оператор используется для сравнения объектных переменных – для проверки, не ссылаются ли они на один и тот же объект?
Ответ:
(1) Or
(2) Like
(3) Is
(4) =
Номер 3
Какой оператор, используемый при построении сложных условий трактуется как "ИЛИ"
Ответ:
(1) Or
(2) Like
(3) =
Упражнение 8:
Номер 1
Укажите описание синтаксической ошибки
Ответ:
(1) эта ошибка возникает при расчете какого-либо показателя по неправильной формуле
(2) эта ошибка возникает при использовании неправильного ключевого слова
(3) эта ошибка возникает при возникновении непредусмотренных программистом обстоятельств во время выполнения программы. Например – при делении на 0 или при попытке открытия несуществующего файла
Номер 2
Укажите описание ошибки времени выполнения
Ответ:
(1) эта ошибка возникает при использовании неправильного ключевого слова
(2) эта ошибка возникает при расчете какого-либо показателя по неправильной формуле
(3) эта ошибка возникает при возникновении непредусмотренных программистом обстоятельств во время выполнения программы. Например – при делении на 0 или при попытке открытия несуществующего файла
Номер 3
Укажите описание логической ошибки
Ответ:
(1) эта ошибка возникает при расчете какого-либо показателя по неправильной формуле
(2) эта ошибка возникает при использовании неправильного ключевого слова
(3) эта ошибка возникает при возникновении непредусмотренных программистом обстоятельств во время выполнения программы. Например – при делении на 0 или при попытке открытия несуществующего файла
Упражнение 9:
Номер 1
Назовите основной метод отладки программ.
Ответ:
(1) синтаксическая проверка кода при вводе ключевых слов
(2) проверка формул, используемых в программе, до ее выполнения
(3) пошаговое исполнение программы с использованием точек останова (breakpoint)
(4) программу следует передать конечному пользователю и на основе его сообщений об ошибках в ее работе, проводить доработку программы
Номер 2
Как используется окно Locals при отладке приложений?
Ответ:
(1) оно позволяет читать диагностические сообщения приложений
(2) оно позволяет просматривать и изменять свойства всех объектов приложения и значения переменных
(3) оно позволяет выполнять различные команды без запуска приложения
(4) оно предназначено для контроля за отдельными выражениями, значениями переменных
Номер 3
Как используется окно Watches при отладке приложений?
Ответ:
(1) оно позволяет читать диагностические сообщения приложений
(2) оно позволяет просматривать и изменять свойства всех объектов приложения и значения переменных
(3) оно позволяет выполнять различные команды без запуска приложения
(4) оно предназначено для контроля за отдельными выражениями, значениями переменных во время выполнения программы
Упражнение 10:
Номер 1
МетодDebugпозволяет
Ответ:
(1) останавливать выполнение программы в заданной точке
(2) выводить диагностические сообщения в окно Immediate
(3) выводить диагностические сообщения в виде окон сообщений
(4) генерировать ошибки для отладочных целей
Номер 2
Какой объект позволяет просматривать информацию о возникшей ошибке времени выполнения и, для отладочных целей, генерировать произвольные ошибки?
Ответ:
(1) Debug
(2) Err
(3) ErrHandler
(4) Error
Номер 3
Какая команда позволяет запустить слежение за ошибками времени выполнения и передачу управления при возникновении ошибки в обработчик ошибок?
Ответ:
(1) Debug Идентификатор_обработчика
(2) Err Идентификатор_обработчика
(3) On Error GoTo Идентификатор_обработчика
(4) GoTo Идентификатор_обработчика
|
Smoug1894 0 / 0 / 0 Регистрация: 15.09.2018 Сообщений: 20 |
||||
|
1 |
||||
Можно ли менять размер динамического массива?28.01.2019, 05:25. Показов 4890. Ответов 17 Метки нет (Все метки)
Здравствуйте.Такой вопрос: можно ли изменить размер динамического массива.Допустим я задал динамический массив таким образом:
Могу ли я после этого изменить его размер?И если да то как?
__________________
0 |
|
Модератор 12641 / 10135 / 6102 Регистрация: 18.12.2011 Сообщений: 27,171 |
|
|
28.01.2019, 05:37 |
2 |
|
1. Создать новый массив нужного размера.
0 |
|
TrollHammer 1173 / 678 / 324 Регистрация: 22.02.2018 Сообщений: 1,943 Записей в блоге: 2 |
||||
|
28.01.2019, 05:47 |
3 |
|||
|
А realloc не сработает?
0 |
|
Модератор 12641 / 10135 / 6102 Регистрация: 18.12.2011 Сообщений: 27,171 |
|
|
28.01.2019, 06:04 |
4 |
|
А realloc не сработает? Если вместо new/delete будете использовать malloc/free, то сработает,
0 |
|
1173 / 678 / 324 Регистрация: 22.02.2018 Сообщений: 1,943 Записей в блоге: 2 |
|
|
28.01.2019, 06:14 |
5 |
|
Если вместо new/delete будете использовать Пример нормально отработал, массив увеличился
0 |
|
Параллельный Кот 1904 / 826 / 350 Регистрация: 25.03.2016 Сообщений: 2,045 |
|
|
28.01.2019, 08:46 |
6 |
|
TrollHammer, в этом и заключается UB: нельзя опираться только на тот факт, что программа в данном конкретном эксперименте работает правильно. new/delete могут транслироваться в malloc/free, а могут и не транслироваться. По поводу realloc стандарт говорит следующее: ptr — Pointer to a memory block previously allocated with malloc, calloc or realloc.
0 |
|
610 / 415 / 151 Регистрация: 11.01.2019 Сообщений: 1,746 |
|
|
28.01.2019, 10:20 |
7 |
|
Могу ли я после этого изменить его размер?И если да то как? Можно поступить так же, как сделано в STL. Ввести 2 переменные: предельный размер массива (capacity) и число элементов массива (size). Изначально size == capacity. Если размер надо уменьшить, то никаких операций с памятью не делаем, просто тупо уменьшаем size до нужной величины. Если же размер надо увеличить больше capacity, то придется старый массив перебросить в новое место в памяти, установив новое значение size == capacity, и потом удалить.
0 |
|
3531 / 2195 / 401 Регистрация: 09.09.2017 Сообщений: 9,040 |
|
|
28.01.2019, 11:45 |
8 |
|
Но для примитивных типов данных (не классов) можно просто заменить new/delete на malloc/free
0 |
|
7423 / 5018 / 2890 Регистрация: 18.12.2017 Сообщений: 15,694 |
|
|
28.01.2019, 15:56 |
9 |
|
Могу ли я после этого изменить его размер? считаю что можно в сторону уменьшения. если размер нужно увеличить — через создание доп. массива
0 |
|
3531 / 2195 / 401 Регистрация: 09.09.2017 Сообщений: 9,040 |
|
|
28.01.2019, 18:04 |
10 |
|
считаю что можно в сторону уменьшения. Если использовать realloc(), то и в сторону уменьшения нельзя. Не будут вызваны деструкторы для удаляемых элементов.
0 |
|
7423 / 5018 / 2890 Регистрация: 18.12.2017 Сообщений: 15,694 |
|
|
29.01.2019, 01:29 |
11 |
|
Если использовать realloc я не про realloc, а про вопрос TC (выделение памяти через new). SIZE задан не как константная величина, почему бы не уменьшить SIZE если нужно. а вот увеличить нельзя — залезаем в чужую память.
0 |
|
610 / 415 / 151 Регистрация: 11.01.2019 Сообщений: 1,746 |
|
|
29.01.2019, 09:56 |
12 |
|
заменить new/delete на malloc/free Как ни крути, а все эти new/delete в библиотеке реализуются, в конечном счете, через malloc/free
0 |
|
3531 / 2195 / 401 Регистрация: 09.09.2017 Сообщений: 9,040 |
|
|
29.01.2019, 11:18 |
13 |
|
почему бы не уменьшить SIZE если нужно. а вот увеличить нельзя — залезаем в чужую память.
Если же речь просто о том, чтобы часть массива оставить незадействованной, то можно. Вот только уменьшением это не будет. .
Как ни крути, а все эти new/delete в библиотеке реализуются, в конечном счете, через malloc/free
Не будут вызваны деструкторы для удаляемых элементов. .
0 |
|
610 / 415 / 151 Регистрация: 11.01.2019 Сообщений: 1,746 |
|
|
29.01.2019, 12:03 |
14 |
|
Зачем вы задаете вопросы, на которые постом ранее был озвучен ответ? Причем тут деструкторы??? Вы читать умеете? New/delete реализуются НА ОСНОВЕ malloc/free. И ДОПОЛНИТЕЛЬНО вызывают деструкторы объектов. И вообще, только неопытный программист будет пытаться скрестить обычные массивы с классами.
0 |
|
3531 / 2195 / 401 Регистрация: 09.09.2017 Сообщений: 9,040 |
|
|
29.01.2019, 12:44 |
15 |
|
Причем тут деструкторы??? Вы читать умеете? New/delete реализуются НА ОСНОВЕ malloc/free. И ДОПОЛНИТЕЛЬНО вызывают деструкторы объектов Могу еще раз себя процитировать:
Если использовать realloc(), то и в сторону уменьшения нельзя. Не будут вызваны деструкторы для удаляемых элементов. Если все еще непонятно, распишу более подробно: new/delete могут быть реализованы через malloc/free. Но не обязаны. Поэтому применять их вперемешку к одному объекту нельзя. То есть если массив выделен через new, то менять его размер (в любую сторону) при помощи realloc нельзя. Освобождать при помощи free нельзя. Хотя можно попробовать после realloc’а вызвать деструкторы у удаляемых элементов вручную, но тоже сомнительное решение. Как минимум, new/delete могут быть реализованы не через malloc/free, а через какой-нибудь mmap.
И вообще, только неопытный программист будет пытаться скрестить обычные массивы с классами. А как будет действовать опытный если ему нужен массив объектов?
0 |
|
610 / 415 / 151 Регистрация: 11.01.2019 Сообщений: 1,746 |
|
|
29.01.2019, 14:53 |
16 |
|
А как будет действовать опытный если ему нужен массив объектов? Ну, видимо, создаст что-то на основе STL.
Поэтому применять их вперемешку к одному объекту нельзя. С этим совершенно согласен! А теперь я процитирую себя:
Можно поступить так же, как сделано в STL. Ввести 2 переменные: предельный размер массива (capacity) и число элементов массива (size). Изначально size == capacity. Если размер надо уменьшить, то никаких операций с памятью не делаем, просто тупо уменьшаем size до нужной величины. Если же размер надо увеличить больше capacity, то придется старый массив перебросить в новое место в памяти, установив новое значение size == capacity, и потом удалить.
0 |
|
3531 / 2195 / 401 Регистрация: 09.09.2017 Сообщений: 9,040 |
|
|
29.01.2019, 15:54 |
17 |
|
Ну, видимо, создаст что-то на основе STL. я бы не был столь категоричен. Зачем тянуть stl если и обычные массивы решают задачу не хуже
Можно поступить так же, как сделано в STL. Ввести 2 переменные: предельный размер массива (capacity) и число элементов массива (size). Это-то один из стандартных способов. Можно еще для увеличения размера удваивать выделяемый размер и т.п. Но это значительно сложнее в реализации, чем хотел ТС и чем простой realloc
0 |
|
610 / 415 / 151 Регистрация: 11.01.2019 Сообщений: 1,746 |
|
|
29.01.2019, 15:58 |
18 |
|
Зачем тянуть stl если и обычные массивы решают задачу не хуже Ну-ну… До тех пор, пока класс объектов, включаемых в массив, не станет базовым.
0 |
Можно ли изменить размер массива после того, как он объявлен как переменная экземпляра?
В моем задании я должен написать метод born() и addChildren(). Запрещается использовать List поэтому нам разрешено использовать только массивы. Каждый человек имеет массив объектов в качестве своей переменной экземпляра (детей). Должен ли я устанавливать постоянный размер, когда я его объявляю? Например;
private Person[] children = new Person[5];
Или можно использовать такой метод после создания children[] с размером 0?
private Person[] children = new Person[0];
public void addChildren(Person x){
Person[] newArray = new Person[children.length+1];
System.arraycopy(children, 0, newArray, 0, children.length);
/*
* or this can be used:
* for(i=0;i<children.length;i++)
* children[i] = newArray[i];
*/
newArray[newArray.length-1] = x;
children = newArray;
}
Я нашел этот код на другом сайте, когда я искал ответ, поэтому я не уверен, что он работает правильно в этой ситуации. Заранее спасибо!
22 март 2015, в 20:36
Поделиться
Источник
Учитывая ограничение, что нельзя использовать List, подход к созданию нового массива и копирование элементов верен, но способ, которым вы сейчас это делаете, не оптимизирован. Я предлагаю вам увеличить размер массива на какой-то фактор, чтобы избежать копирования массива при каждом добавлении.
Здесь простая реализация, которая увеличивает размер массива на половину текущего размера каждый раз, когда у него заканчивается пространство для хранения. size сообщает вам текущее количество «действительных» элементов, так что фактический массив данных охватывает от индекса 0 до size-1.
private int size = 0;
private int capacity = 10;
private Person[] children = new Person[capacity];
private static final float factor = 0.5f;
public void addChildren(Person x) {
if (size == capacity) {
capacity += (int) (capacity * factor);
Person[] newArray = new Person[capacity];
System.arraycopy(children, 0, newArray, 0, size);
children = newArray;
}
children[size++] = x;
}
Ravi Thapliyal
22 март 2015, в 17:38
Поделиться
Вы не можете изменить размер примитивного массива, так как он становится постоянной выделенной памятью. То, что вы делаете, это просто создать новый массив, скопировать предыдущие элементы массива и затем передать ссылку. Если вы не можете использовать ArrayLists или более продвинутые коллекции, вы не можете его изменить.
Nemo_Sol
22 март 2015, в 16:31
Поделиться
Ещё вопросы
- 1Как отдельный класс GUI будет взаимодействовать с классами логики?
- 1Несколько звонков на веб-сервисы из Node.js
- 0передача данных td на скрытый ввод и последующее размещение с помощью PHP
- 0Outlook 2007/2010/2013 Проблема с отображением электронной почты
- 0GMP неисправен алгоритм наивной простоты c ++
- 1Загрузка файлов на сервер в Android
- 0Невозможно опубликовать массив, используя jquery $ .post
- 1привязка данных не работает в простом приложении Knockoutjs
- 0opcache включен, но почему я не вижу никакой разницы
- 0ошибка в меню суперфиши в режиме просмотра совместимости IE
- 1Буферизация / синхронизация нескольких аудиопотоков в JavaScript
- 1Установите вызов Moq для защищенного виртуального метода, который ожидает Func и возвращает IEnumerable
- 0Возникли проблемы с if и while ((row = mysql_fetch_row (query_results))! = 0)
- 1Как загрузить файлы в Google Drive другого человека
- 1Настройка цвета фона элемента списка теряет подсветку
- 0Ошибка: [ng: areq] Аргумент не является функцией, получил неопределенный
- 1«Очистка» от неточностей двойных значений
- 0как динамически задать высоту для iframe
- 0AngularJS заказать к дате
- 0Перебирая строки в векторе и удаляя пробелы
- 1Обнаружено недопустимое содержимое, начиная с element-PropertyPlaceholderConfigurer
- 1Java ArrayList метод clear ()
- 1добавить краски объектов Android
- 0Цепочка подзапросов SQL в большом запросе JOINS
- 0JQuery доступ к динамическим селекторам классов
- 1Слишком много раз срабатывает активность
- 1Внедрение различных реализаций интерфейса в разные контроллеры с помощью Autofac
- 1Entity Framework — нет первого варианта кода на веб-сайте asp.net.
- 0Изменить цвет заливки импортированного файла SVG
- 0Функция привязки с большим количеством аргументов, чем необходимо, и передача ей определенных аргументов
- 0Извлечение данных из MySQL, проблемы с другим запросом
- 0C ++ Builder WMI: неверный запрос
- 0Выполнение вызовов PayPal API в PHP без cURL
- 0php loop математические вопросы
- 0Какую структуру данных можно использовать в php для предварительного обхода дерева?
- 1Ошибка аутентификации с помощью API Sharepoint API Python Office365 Rest API
- 0Заголовок API-ключа не отправляется (или не распознается). Angularjs
- 0Как динамически добавлять шаблоны на страницу в Angular
- 1Возвращение логических значений в методе C #
- 0AngularJS Рассчитать сумму каждого массива
- 0Вывести интегратор с картой
- 1NullpointerException при обращении к массиву 4d с помощью цикла for
- 0PHP REGEXP для замены строк на URL-адреса в тегах <p>
- 1Почему моя Android-анимация не вызывает мой onAnimationEnd?
- 0Как запросить Google статические карты API для всех уличных суффиксов в почтовом индексе?
- 1Файл хвостового журнала Java и отобразите его в jsp
- 0Очередь обработки изображений PHP, проблемы с выполненными заданиями
- 1Как сохранить мой Wi-Fi всегда включенным?
- 0Ограничение доступа к содержимому контейнера Docker
- 0Поместите функцию в шаблон

Кажется странным вопросом, но когда я программирую, например, на c ++ или c, мне приходится жестко кодировать размер массива.
Не возможно ли пользователю через терминал ввести размер. Так далеко я не могу понять, возможно ли это, и удивляюсь, почему это запрещено.
РЕДАКТИРОВАТЬ:
Насколько я понимаю, массивы статичны, и мы можем использовать списки ссылок, поскольку они более динамичны. Почему массивы не могут быть динамическими?
0
Решение
Когда вы выделяете блок памяти, вы делаете именно это — блок памяти, размер которого вы запрашивали, выделяется, и вы получаете указатель на него.
Если вы попытаетесь выйти за пределы конца этого блока, вы будете читать / записывать в память, которая не принадлежит массиву.
Чтобы расширить массив, вам нужно больше памяти — но ваш блок недостаточно велик для этого. Вам нужно выделить новый блок и изменить указатель на этот новый блок, вы не можете сделать это, изменив размер существующего, поскольку пространство после вашего блока уже может быть использовано кем-то другим!
Вот почему невозможно изменить размер существующего массива.
2
Другие решения
Это было дизайнерское решение C о том, что встроенные массивы будут простой и быстрой структурой, которая отражает операции, которые могут быть дешево выполнены процессором. В языках с массивами переменного размера изменение размера массива может быть очень дорогостоящим, поскольку под кодом будет вызываться перераспределение нового блока памяти другого размера и копирование существующего содержимого.
В C вы сами контролируете эти операции по изменению размера, используя кучу и malloc / realloc, потому что это язык C. C ++ имеет массивы, которые делают это для вас, как std :: vector, или даже в C вы можете использовать библиотечные функции для управления динамическими массивами. Это просто простой массив C, разработанный для того, чтобы быть простым и быстрым.
3
С
В C99 и более новых стандартах вы можете использовать VLA:
int len = ask_length_from_user();
int array[len];
for (int i = 0; i < len ; ++i) array[i] = i;
Обратите внимание, что с VLA вы должны быть осторожны с размером, потому что VLA будет храниться в стеке, который часто весьма ограничен (только мегабайтами, а не гигабайтами из максимальной кучи).
Возможно, лучше использовать кучу:
int len = ask_length_from_user();
int *array = malloc (sizeof(int) * len);
if (!array) exit(1); // malloc failed
for (int i = 0; i < len ; ++i) array[i] = i;
Обратите внимание, как вы можете получить доступ к выделенной памяти с тем же синтаксисом, что и для доступа к массиву. Кроме того, вы можете изменить размер памяти, выделенной с malloc:
int tmplen = ask_length_from_user();
int *tmparr = realloc(array, sizeof(int) * tmplen);
if (tmparr) {
array = tmparr;
// note: following loop doesn't do anything if len >= newlen
while(len < tmplen) array[len++] = len;
}
// else realloc failed, keep original array and len
Наконец, с mallocпомните память!
free(array);
Вы должны использовать, например, станд :: вектор:
int len = ask_length_from_user();
std::vector<int> array;
for (int i = 0; i < len ; ++i) array.push_back(i);
// alternatively, you can resize the array and use indexes like in C snippets:
array.resize(len);
for (int i = 0; i < len ; ++i) array[i] = i;
И код для изменения размера, только с push_back:
int tmplen = ask_length_from_user();
if (tmplen < len) {
len = tmplen;
array.resize(tmplen);
} else {
while (len < tmplen) array.push_back(len++);
}
Как видите, коды на C и C ++ совершенно разные. Это разные языки, и редко имеет смысл спрашивать об одном и том же. Код на C (кроме VLA в текущем стандарте C ++) будет работать на C ++, но делать это не очень хорошая идея, это не очень хороший C ++, и по крайней мере вам следует избегать malloc и использовать new (хотя это не поддерживает изменение размера приятно).
3
Поскольку статические (автоматические) переменные размещаются в стеке, а адрес стека фрейма фиксируется в течение времени жизни функции, поэтому адрес переменной также является статическим. Как только вы объявите массив в какой-то позиции, вы не сможете увеличить его, не перекрывая другие переменные после. C99 допускает массивы переменной длины, размеры которых известны только во время выполнения, но их размеры все еще фиксированы, вы не можете изменить его размер после объявления.
Но вам не нужен C99 или вектор для изменения размера массива. Вы всегда можете выделить динамическую память в куче и использовать указатель в качестве массива, потому что они не «отличаются» в использовании таким образом. Размер динамической памяти изменяется путем выделения новой области памяти и копирования данных в новое место, если это необходимо.
0



