О массивах c - PullRequest
       29

О массивах c

3 голосов
/ 14 июня 2009

Я знаю, что вы можете объявить массив в C следующим образом:

int nums[5] = {0,1,2,3,4};

Тем не менее, вы можете сделать это?

int nums[5];
// more code....
nums = { 0,2,5,1,2};

Другими словами, могу ли я инициализировать массив с помощью обозначения в скобках в любое другое время чем просто декларация? Спасибо за ваше время, Sam

Ответы [ 6 ]

17 голосов
/ 14 июня 2009

Это невозможно в C89 (на что ориентируется большинство компиляторов C). C99 поддерживается несколькими и имеет составные литералы:

int nums[5];
memcpy(nums, (int[5]){1, 2, 3, 4, 5}, 5 * sizeof(int));

Однако вы не можете назначить массив. Вы можете скопировать только в свою память. Вам понадобится другой массив, из которого вы копируете в C89

int nums[5]; 
int vals[] = { 1, 2, 3, 4, 5 };
memcpy(nums, vals, sizeof vals);

Обратите внимание, что оператор sizeof возвращает размер своего операнда в байтах.

3 голосов
/ 14 июня 2009

Стандарт гласит, что невозможно присвоить сразу всем элементам массива с помощью выражения присваивания. Вы можете сделать это только во время объявления.

Но вы можете добиться того, что пытаетесь сделать, копируя с помощью стандартных функций.

1 голос
/ 14 июня 2009

Неа. Объявление в вашем примере ...

int nums[5] = {0,1,2,3,4};

... называется инициализатором . Инициализаторы являются частью объявления данных, которое определяет начальные значения ваших элементов массива.

Если вы создаете массив без инициализатора, вам не повезло. Вы должны присваивать значения элементам массива старомодным способом.

1 голос
/ 14 июня 2009

Простой ответ: нет.

Инициализация массива C возможна только во время его объявления.

1 голос
/ 14 июня 2009

Это просто невозможно

0 голосов
/ 15 июня 2009

Вы можете объявить числа как указатель.

int * nums;

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

int tmp[5] = {0,1,2,3,4};

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