Как давать значения массивам в c


Я получаю ошибку в следующей программе. Я не могу понять, почему я не могу хранить значения в массиве

main()
{
    int A[10];
    A = {3,1,2,3,4,1,5,8,9,0};
    printArr(A,10);
    printf("n");

    BubbleSort(A,10);

    printArr(A,10);
    printf("n----------------Bubble Sort Efficiently ---------------------n");
    printf("n");

    A = {3,1,2,3,4,1,5,8,9,0};

    BubbleSortEfficient(A,10);
    printArr(A,10);

    return 0;
}

Это ошибка, которую я получил:

73: error: expected expression before ‘{’ token
80: error: expected expression before ‘{’ token

Пожалуйста, объясните причину, по которой я не могу хранить элементы массива.

4 5

4 ответа:

ANSI C не имеет синтаксиса для определенияагрегатов массива вне инициализаторов массива. Если вы объедините инициализацию с назначением (которое технически не является назначением, а является частью инициализации), ваш код скомпилируется:

int A[10] = {3,1,2,3,4,1,5,8,9,0};

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

int B[10] = {3,1,2,3,4,1,5,8,9,0};
BubbleSortEfficient(B, 10);
printArr(B, 10);

EDIT: (в ответ на комментарий кита Томпсона) C99 вводит агрегат массива выражения, но они не могут быть назначены массивам, поскольку стандарт не имеет назначений массивов.

Фигурные скобки используются для инициализации, а не для присвоения. Вы должны быть в состоянии сделать это:

int A[10]={3,1,2,3,4,1,5,8,9,0};

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

struct array {
    int a[10];
};

const struct array x = { {3,1,2,3,4,1,5,8,9,0} };
struct array A;
A = x;
BubbleSort(A.a,10);
A = x;
BubbleSortEfficient(A.a,10);

Или можно использовать более традиционное memcpy():

int A[10];
memcpy(A, (int[]){3,1,2,3,4,1,5,8,9,0}, sizeof(A));

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

' int A[10]={3,1,2,3,4,1,5,8,9,0};'