C ++ инициализировать указатель массива - PullRequest
13 голосов
/ 17 июня 2011

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

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

спасибо.

Ответы [ 3 ]

10 голосов
/ 17 июня 2011

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

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, но идея та же

Некоторые из них могли бы стать допустимыми в C ++0x, я не уверен.

0 голосов
/ 18 июня 2011

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

Но называть сетку (int *) некорректно.

0 голосов
/ 17 июня 2011

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

int grid[] = {1 , 2 , 3};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...