Назначение массивов C / C ++ - PullRequest
3 голосов
/ 25 декабря 2010

Пример кода:

int ar[3];
............
ar[0] = 123;
ar[1] = 456;
ar[2] = 789;

Есть ли способ инициализировать его короче?Что-то вроде:

int ar[3];
............
ar[] = { 123, 456, 789 };

Мне не нужно решение вроде:

int ar[] = { 123, 456, 789 };

Определение и инициализация должны быть отдельными.

Ответы [ 5 ]

5 голосов
/ 25 декабря 2010

То, что вы просите, не может быть сделано напрямую. Однако есть и другие вещи, которые вы можете сделать там, начиная с создания локального массива, инициализированного с помощью инициализации агрегата, и затем memcpy -ed над вашим массивом (действует только для типов POD), или используя библиотеки более высокого уровня, такие как boost::assign.

// option1
int array[10];
//... code
{
   int tmp[10] = { 1, 2, 3, 4, 5 }
   memcpy( array, tmp, sizeof array ); // ! beware of both array sizes here!!
}  // end of local scope, tmp should go away and compiler can reclaim stack space

У меня нет времени, чтобы проверить, как это сделать с boost::assign, так как я почти никогда не работаю с необработанными массивами.

0 голосов
/ 02 января 2011

А как насчет инициализации массива C99?

int array[] = {
   [0] = 5, // array[0] = 5
   [3] = 8, // array[3] = 8
   [255] = 9, // array[255] = 9
};
0 голосов
/ 28 декабря 2010
#include <iostream>

using namespace std;

int main()
{
    int arr[3];
    arr[0] = 123, arr[1] = 345, arr[2] = 567;
    printf("%d,%d,%d", arr[0], arr[1], arr[2]);
    return 0;
}
0 голосов
/ 25 декабря 2010

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

вам это не подходит?

main()
{
    int a[] = {1,3,2};

    printf("%d %d %d\n", a[0], a[1], a[2]);
    printf("Size: %d\n", (sizeof(a) / sizeof(int)));

}

отпечатки:

1 3 2
Size: 3
0 голосов
/ 25 декабря 2010

Массивы можно назначать напрямую:

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

Проверьте также учебник C ++ Arrays .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...