2013-07-17 5 views
5

Ich erhalte Fehler im folgende Programm. Ich bin, um herauszufinden, nicht in der Lage, warum ich nicht in der Lage bin Werte im Array speichernWie Werte geben, in c auf Arrays

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

Dies ist der Fehler, den ich bekam:

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

Bitte klären Sie mit Grunde, warum ich nicht in der Lage bin Array zu speichern Elemente.

+4

'A = {3,1,2,3,4,1,5,8,9,0};' Sie können nicht Array wie folgt zugewiesen werden. – johnchen902

+0

Was der Fehler sagt? Und bei welcher Linie? –

+0

73: Fehler: erwarteter Ausdruck vor '{' token BubbleSort.c: 80: Fehler: erwarteter Ausdruck vor '{' token –

Antwort

9

ANSI C hat keine Syntax zum Definieren von Array-Aggregaten außerhalb von Array-Initialisierern. Wenn Sie die Initialisierung mit der Zuordnung verbinden (was technisch nicht eine Zuordnung ist, aber ein Teil der Initialisierung) wird Ihr Code kompilieren:

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

Da Sie nicht Arrays zuweisen können, um den Teil des Programms vor dem zweiten Aufruf von BubbleSortEfficient sollte wie folgt aussehen:

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

EDIT: (als Antwort auf einen Kommentar von Keith Thompson) C99 stellt Array Aggregatausdrücke, aber sie können nicht auf Arrays zugeordnet werden, da die Norm nicht Array-Zuweisungen haben.

+0

Vielen Dank. Tolle Tatsache zu beachten. –

+2

C nicht Array Aggregate ("compound Literalen") mit C99 beginnend: 'int [] {1, 2, 3, 4, 5}' ein gültiger Ausdruck. Aber das macht das OP nicht sehr gut, da C keine Array-Zuweisung hat. –

+1

@KeithThompson In der Tat, vielen Dank für eine tolle Nachricht! Ich habe die Antwort bearbeitet, um Ihren Standpunkt zu berücksichtigen. Vielen Dank! – dasblinkenlight

4

Geschweifte Klammern sind für die Initialisierung verwendet wird, nicht Zuordnung. Sie sollten in der Lage sein, dies zu tun:

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

Gibt es eine andere Möglichkeit, Arrays erneut zu aggregieren. –

4

Sie können nicht direkt zu einem Array zuweisen, da ein Array kein modifizierbarer Lvalue ist. Wenn Sie jedoch ein Array mit einer Struktur umschließen, können Sie einer Struktur zuweisen.

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

Alternativ können Sie die traditionellere verwenden memcpy():

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

'int [] {3,1,2,3,4,1,5,8,9,0}' ist gleich '(int []) {3,1,2,3,4,1,5,8 , 9,0} '? 'int []' bedeutet, das '{3,1,2 ..}' (Array-Literal) in 'int [] '? – Sayakiss

+0

@Sayakiss: Danke, ich korrigiere die Antwort, es sollte '(int []) {...}' sein. Ja, das ist ein zusammengesetzter wörtlicher Ausdruck. – jxh

+0

Ich mochte das Mempy Zeug !! Stimmen Sie dafür auf –

0

ja Sie können keine Werte in das Array zuweisen wie diese. Sie müssen es wie folgt zuweisen,

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