2009-02-22 30 views

Trả lời

9

Tôi đoán bạn đang nghĩ đến realloc. Nhưng nó tốt hơn để quấn một danh sách trong một cấu trúc để theo dõi chiều dài hiện tại của nó

Ví dụ API

struct s_dynamic_array { 
    int allocated; /* keep track of allocated size */ 
    int usedLength; /* keep track of usage   */ 
    int *array;  /* dynamicaly grown with realloc */ 
}; 
typedef struct s_dynamic_array s_dynamic_array; 

s_dynamic_array *new_dynamic_array(int initalSize); 
void    free_dynamic_array(s_dynamic_array *array); 
int    size_of_dynamic_array(s_dynamic_array *array); 
s_dynamic_array *add_int_to_dynamic_array(s_dynamic_array *array, int value); 
int    int_at_index(s_dynamic_array *array, int index); 
+0

Dang. Thực hiện đầy đủ quá. Cảm ơn rất nhiều epatel. –

1

tôi luôn luôn sử dụng realloc cho điều này, bạn có thể bọc mảng chức năng của riêng bạn xung quanh nó. AFAIK, không có những thứ tích hợp khác cho việc này.

+0

tôi đã hy vọng tránh tái phát minh ra bánh xe. xấu hổ làm sao. Tôi chắc chắn rằng các wrappering bạn đang nói về xảy ra tất cả các thời gian. –

+1

Có lẽ có một số thư viện cho nó, nhưng hầu hết trong số đó là dành cho C++ ... – schnaader

+0

:-) Được rồi. Tôi sẽ sử dụng realloc. Cảm ơn đã phản ứng nhanh chóng. –

4

Có một mảng động trong glib. (không glibc mặc dù) Kiểm tra GArray và GPtrArray. Một mảng động không thực sự giống như một danh sách liên kết.

Anyways this là tài nguyên hữu ích nhất mà tôi có thể tìm thấy khi học glib.

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