Có thể sao chép một mảng chung trong ANSI-C thuần túy không?ANSI-C tinh khiết: tạo mảng chung
Tôi có cấu trúc này chứa một mảng (cho nổi tại thời điểm này) và một số biến như kích thước và dung lượng cho đột biến trong mảng.
typedef struct _CustomArray
{
float* array; //the array in which the objects will be stored
int size; //the current size of the array
int capacity; //the max capacity of the array
} CustomArray;
tôi sử dụng này struct vì vậy tôi có thể làm cho một mảng trong C tinh khiết nơi tôi có thể thêm/gỡ bỏ các mục, tự động mở rộng kích thước mảng khi cần thiết vv tất cả những điều một mảng "chuẩn" không, ngoại trừ nó là chỉ được thực hiện trong C. Và bây giờ tôi muốn thực hiện điều này để khi bạn khởi tạo cấu trúc này, bạn có thể đặt kiểu dữ liệu của các phần tử cần giữ, tại thời điểm này, nó chỉ có khả năng lưu trữ kiểu dữ liệu float, nhưng tôi muốn làm cho nó có thể lưu trữ bất kỳ datatype/các cấu trúc khác. Nhưng tôi không biết điều này có thể xảy ra hay không.
Tại thời điểm này các chức năng để làm cho mảng này là:
CustomArray* CustomArray_Create(int initCapacity, /*type elementType*/)
{
CustomArray* customArray_ptr; //create pointer to point at the structure
float* internalArray = (float*)malloc(sizeof(float) * initCapacity); //create the internal array that holds the items
if(internalArray != NULL)
{
CustomArray customArray = { internalArray, 0, initCapacity }; //make the struct with the data
customArray_ptr = &customArray; //get the adress of the structure and assign it to the pointer
return customArray_ptr; //return the pointer
}
return NULL;
}
Có thể đưa ra một kiểu dữ liệu như tham số vì vậy tôi có thể malloc bộ nhớ cho datatype đó và quăng nó như datatype được đưa ra trong một mảng động ?
Cảm ơn trước,
Marnix van Rijswijk
Đừng nghĩ trong Pure C bạn có thể chuyển loại dữ liệu theo cách đó. Nhìn vào các ngôn ngữ hỗ trợ danh sách mảng không đồng nhất, ví dụ C#, nó chỉ hoạt động đối với các kiểu dữ liệu không cơ bản, đó là Lớp và không phải trên int, float, vv .. Vì C không hướng đối tượng, rất khó có khả năng bạn sẽ có được cơ sở này. –
không bắt đầu từ định danh với dấu gạch dưới: các tên như vậy được dành riêng cho việc triển khai (compiler + libc); sử dụng dấu gạch dưới và chữ hoa sau là gấp đôi-xấu: những tên này được đặt trước trong bất kỳ ngữ cảnh nào vì đó là những tính năng ngôn ngữ mới sử dụng (ví dụ '_Pragma',' _Complex', '_Bool', ...); một cách giải quyết dễ dàng là sử dụng dấu gạch dưới, cũng có vẻ đẹp với tiền tố dựa trên tiền tố – Christoph
Có một số câu hỏi trên trang web liên quan đến cách có thể xây dựng hành vi hướng đối tượng trong c: [Object-Orientation in C] (http://stackoverflow.com/q/415452/2509) và [Bạn có thể viết mã hướng đối tượng trong C?] (http://stackoverflow.com/q/351733/2509) và các mã khác. Bạn có thể đạt được kết quả mong muốn của mình bằng cách sử dụng một cách khôn ngoan 'sizeof' và cơ chế con trỏ hàm được thảo luận trong các liên kết, nhưng nó sẽ có nhiều công việc hơn. Giao diện 'qsort' và' bsearch' là một sự thỏa hiệp. – dmckee