Как давать значения массивам в 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 ответа:
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));