Подтвердить что ты не робот

С++ Инициализировать указатель массива

Как инициализировать указатель на литеральный массив?
Я хочу, чтобы * grid указывала на новый выделенный массив int {1, 2, 3}.

int *grid = new int[3];
*grid = {1, 2, 3};

спасибо.

4b9b3361

Ответ 1

Вы не можете инициализировать динамически выделенный массив таким образом. Таким образом, вы не можете назначить массив (динамический или статический). Этот синтаксис действителен только при инициализации статического массива, т.е.

int a[4] = {2, 5, 6, 4};

Я имею в виду, что даже следующее незаконно:

int a[4];
a = {1, 2, 3, 4}; //Error

В вашем случае вы ничего не можете сделать, кроме как скопировать значение каждого элемента вручную

for (int i = 1; i<=size; ++i)
{
    grid[i-1] = i;
}

Вы можете избежать явного цикла с помощью stl-алгоритмов, но идея та же

Некоторые из них, возможно, стали законными в С++ 0x, я не уверен.

Ответ 2

@выше точки сетки в адресное место, где хранится первый элемент решетки массива []. Поскольку в С++ массивы хранятся в смежной памяти, вы можете пройти через свой массив, просто увеличивая сетку и разыгрывая ее.

Но вызов grid a (int *) неверен, хотя.

Ответ 3

Используйте следующий код, сетка - это указатель, сетка [] является элементом этого указателя.

int grid[] = {1 , 2 , 3};