Как инициализировать указатель на литеральный массив?
Я хочу, чтобы * grid указывала на новый выделенный массив int {1, 2, 3}.
int *grid = new int[3];
*grid = {1, 2, 3};
спасибо.
Ответ 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
Используйте следующий код, сетка - это указатель, сетка [] является элементом этого указателя.