Динамическое присвоение номеров массиву в C - PullRequest
2 голосов
/ 18 декабря 2009

Я хочу сделать это:

char a[5];

//run some code here
//then

a[]={0,1,2,3,4};  //**compiler doesn't like it

но я не хочу этого делать:

a[0]=0;
a[1]=1;
a[2]=2;
a[3]=3;
a[4]=4;

Знаете ли вы какой-либо способ заполнить массив во время выполнения числами, а не строкой (т.е. не a ="hello"), за один раз вместо определения каждого элемента по отдельности?

Спасибо

Raed

Ответы [ 8 ]

5 голосов
/ 18 декабря 2009

Нет, это невозможно сделать. Вам нужно использовать цикл или назначать каждое значение индивидуально.

2 голосов
/ 18 декабря 2009

char a[5];

//run some code here
//then

static const char a_01234[sizeof(a)] = {0,1,2,3,4};
memcpy(a, a_01234, sizeof(a));
2 голосов
/ 18 декабря 2009

Ну, вы можете настроить шаблон для последующего копирования в него:

#include <stdio.h>
#include <string.h>

static char a_src[] = {0,10,20,30,40};
int main() {
    char a[5];

    memcpy (a, a_src, sizeof(a_src));
    printf ("%d\n", a[3]);
    return 0;
}

Выход 30 при запуске.

Но это все еще технически источник данных во время компиляции. Если вы действительно хотите сделать это во время выполнения (с вычисленными значениями), вам нужно делать это поэлементно.

1 голос
/ 18 декабря 2009

Вы могли бы сделать memcpy(a, "\0\1\2\3\4", 5);, но это плохая практика и стиль кодирования.

Если не считать этого, то нет, вы не можете.

0 голосов
/ 18 декабря 2009

Использование составных литералов C99 (поддерживается GCC, но не MSVC),

char a[5];

//run some code here
//then

memcpy(a, (char[]){0,1,2,3,4}, sizeof(a));
0 голосов
/ 18 декабря 2009

Вы можете использовать указатель и ссылаться на него как на массив.

char * a;
char b[5] = {0,1,2,3,4};
char c[5] = {5,6,7,8,9};

//run some code here
//then

a = b;  // "Populate" the "array"

// Then reference a using array notation
printf ("%d\n", a[3]);  // Print the number 3

// run some more code

a = c;  // "Populate the "array" with some new values
printf ("%d\n", a[3]);  // Print the number 8
0 голосов
/ 18 декабря 2009

sprintf (a, "% d% d% d% d% d", 0,1,2,3,4);

Изменен мой ответ.

0 голосов
/ 18 декабря 2009

Вы пробовали это:

char a[] = {0, 1, 2, 3, 4};

Компилятор автоматически установит для него массив из 5, инициализированный с каждым элементом, соответствующим их значению и индексу.

Edit: Глядя на это снова, я понял, что вы искали. Короче говоря, компилятор не примет это.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

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