В настоящее время я изучаю C++, так что извините, если мне кажется немного глупо.C++ Создание массива с помощью указателей
Мое текущее упражнение, в котором я застрял, требует от меня написать функцию IndexArray (int n), которая возвращает указатель на динамически распределенный целочисленный массив с n элементами, каждый из которых инициализируется собственным индексом , (скопирован с листа).
Я прочитал это несколько раз, и не в полной мере понимаю, но они дали пример:
Предполагая, что IntPtr объявлен как
int *intPtr;
Заявление
intPtr = IndexArray(10);
должен иметь следующую конфигурацию памяти:
intPtr -> 0 1 2 3 4 5 6 7 8 9
В этом примере я предполагаю, что моей функции необходимо создать массив размером n, со значениями от 0 до n-1, а затем другой указатель должен указывать на этот массив.
Вот их тестовый код:
int *values1;
values1 = IndexArray(10);
Я знаю, как легко создать массив, но я не совсем понимаю, указатели достаточно, чтобы знать, на самом деле, что делать. Я понял, возвращая массив будет работать:
int *IndexArray(int n) {
cout << n << endl;
int arrayTemp[n];
for(int i = 0; i < n; i++) {
arrayTemp[i] = i;
}
return arrayTemp;
}
Однако при тестировании, values1 массив не содержит значения из 0-9 (хотя arrayTemp делает правильно, прежде чем он вернулся).
Любая помощь будет потрясающей, и, надеюсь, я дал все, что вам нужно, чтобы помочь. Благодаря! : D
int arrayTemp [n]; => int * arrayTemp = new int (n); Память Beacuse, выделенная для int arrayTemp [n], будет выпущена после возврата arrayTemp; – neohope
Это не C++. C++ не поддерживает VLA (массивы переменной длины). Тег изменен на C –
Это C++, и это не массивы переменной длины. Длина массива никогда не изменяется. Длина передается функции, а размер массива создается из отправленной длины. После этого он никогда не меняется. –