2013-07-17 40 views
5

Tôi gặp lỗi trong chương trình sau. Tôi không thể tìm ra lý do tại sao tôi không thể để lưu trữ các giá trị trong mảngCách đặt giá trị cho các mảng trong 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; 
} 

Đây là lỗi tôi nhận:

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

Xin làm rõ với lý do tại sao tôi không thể để lưu trữ mảng các yếu tố.

+4

'A = {3,1,2,3,4,1,5,8,9,0};' Bạn không thể gán mảng như thế này. – johnchen902

+0

Lỗi nói gì? Và ở dòng nào? –

+0

73: lỗi: biểu thức dự kiến ​​trước '{' mã thông báo BubbleSort.c: 80: lỗi: biểu thức được mong đợi trước '{' token –

Trả lời

9

ANSI C không có cú pháp để xác định mảng tổng hợp bên ngoài bộ khởi tạo mảng. Nếu bạn kết hợp khởi với việc chuyển nhượng (mà về mặt kỹ thuật không phải là một nhiệm vụ, nhưng phần khởi tạo) mã của bạn sẽ biên dịch:

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

Vì bạn không thể gán mảng, một phần của chương trình của bạn trước khi cuộc gọi thứ hai của BubbleSortEfficient nên giống như thế này:

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

EDIT: (để phản ứng lại bình luận bởi Keith Thompson) C99 giới thiệu biểu thức tổng hợp mảng, nhưng họ không thể được gán cho mảng, vì tiêu chuẩn không có bài tập mảng.

+0

Cảm ơn rất nhiều. Sự thật tuyệt vời cần lưu ý. –

+2

C không có mảng tổng hợp ("hợp chất literals") bắt đầu bằng C99: 'int [] {1, 2, 3, 4, 5}' là một biểu thức hợp lệ. Nhưng điều này không làm OP tốt lắm, vì C không có phép gán mảng. –

+1

@KeithThompson Thật vậy, cảm ơn vì một lưu ý tuyệt vời! Tôi đã chỉnh sửa câu trả lời để bao gồm cả điểm của bạn. Cảm ơn! – dasblinkenlight

4

Niềng răng xoăn được sử dụng để khởi tạo, không được gán. Bạn sẽ có thể làm điều này:

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

Có cách nào khác để tổng hợp lại mảng không. –

4

Bạn không thể gán trực tiếp vào một mảng, vì một mảng không phải là một giá trị trái sửa đổi. Tuy nhiên, nếu bạn đặt một mảng với một cấu trúc, thì bạn có thể gán cho một cấu trúc.

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

Hoặc, bạn có thể sử dụng truyền thống hơn 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}' bằng '(int []) {3,1,2,3,4,1,5,8 , 9,0} '? 'int []' có nghĩa là chuyển đổi '{3,1,2 ..}' (mảng chữ) thành 'int []'? – Sayakiss

+0

@Sayakiss: Cảm ơn, tôi đã sửa câu trả lời, nó phải là '(int []) {...}'. Vâng, đó là một biểu thức phức tạp. – jxh

+0

Tôi thích công cụ ghi nhớ !! Bình chọn cho nó –

0

có bạn không thể gán giá trị cho các mảng như thế này. Bạn phải chỉ định như sau,

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

Các vấn đề liên quan