5

我在以下程序中遇到错误。我无法弄清楚为什么我无法在数组中存储值

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

4 回答 4

9

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);

编辑:(回应 Keith Thompson 的评论)C99 引入了数组聚合表达式,但它们不能分配给数组,因为标准没有数组分配。

于 2013-07-17T01:02:30.587 回答
4

您不能直接分配给数组,因为数组不是可修改的左值。但是,如果用结构包围数组,则可以分配给结构。

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));
于 2013-07-17T01:11:46.473 回答
4

花括号用于初始化,而不是赋值。你应该能够做到这一点:

int A[10]={3,1,2,3,4,1,5,8,9,0};
于 2013-07-17T01:03:47.797 回答
0

是的,您不能像这样为数组赋值。您必须按如下方式分配它,

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

于 2013-07-17T05:29:44.880 回答