Как я могу привести или преобразовать int * в int [x]?
В качестве примера я попытался привести указатель int* c = new int[x]
к массиву int b[2]
int b[2] = { 2, 3 };
int* c = new int[b[1]];
c[0] = b[0];
c[1] = b[1];
c[2] = a;
Прежде всего, я знаю, что я могу перебрать указатель и массив. Таким образом, преобразуйте указатель в массив с помощью операторов []
чтобы индексировать указатель и массив, назначая элементы указателя элементам массива в процессе итерации (например, arr[i] = p[i]
). Я хочу знать, можно ли достичь того же результата за меньшее количество строк кода.
Я попытался выяснить это сам, поэтому я сделал быструю программу, чтобы убедиться, что я точно знал, что я пытаюсь поставить и где. Вывод чуть ниже:
Address of {type: int} &a = 0031FEF4; a = 1
Address of {type: int[2]} &b = 0031FEE4; b = 0031FEE4
Address of {type: int[2]} &b[0] = 0031FEE4; b[0] = 2
Address of {type: int[2]} &b[1] = 0031FEE8; b[1] = 3
Address of {type: int*} &c = 0031FED8; c = 008428C8
Address of {type: int*} &c[0] = 008428C8; c[0] = 2
Address of {type: int*} &c[2] = 008428D0; c[2] = 1
Однажды я убедился, что знаю, где я попробовал несколько вещей. Первая идея, которая пришла в голову, состояла в том, чтобы получить адрес второго элемента для выделения указателя, а затем заменить его адресом памяти массива (см. Код чуть ниже). Все, что я пробовал, в конечном итоге провалилось, обычно с синтаксическими ошибками
Это то, что я пытался. Я действительно хочу, чтобы это сработало, так как это было бы самым простым решением.
b = &c[1];
Это не сработало, очевидно.
Изменение: Решение: не делай этого! Если необходимо, создайте указатель на массив, а затем укажите на массив; это бессмысленно для любых целей, которые я могу понять. Для более подробной информации смотрите ответ по Родриго ниже.