40 chức năng phân bổ khác nhau cho 40 địa điểm cuộc gọi khác nhau
void f00(size_t sz) { void* ptr = malloc(sz); free(ptr }
void f01(size_t sz) { void* ptr = malloc(sz); free(ptr }
...
void f39(size_t sz) { void* ptr = malloc(sz); free(ptr }
Một mảng các hàm phân bổ này. Tôi cần xác định nó như thế nào?
Như thế này: tại sao (kích thước_t)
? :
void (*allocators[])(size_t) = { &f00, &f01, ... , &f39 };
hoặc
void* phân bổ [] = { &f00, &f01, ... , &f39 };
Sự khác biệt giữa hai tuyên bố này là gì?
Điều đầu tiên là đúng. Trong lần khai báo đầu tiên, không cần bộ khởi tạo &
. nên
void (*allocators[])(size_t) = { f00, f01, ... , f39 };
nó sẽ người phân bổ
Được khai báo dưới dạng một mảng các con trỏ tới các hàm không trả về gì và yêu cầu một size_t
Kiểu tham số.
(kích thước_t)
Thông báo cho trình biên dịch rằng tất cả các hàm đều yêu cầu tham số thuộc loại này.
Cách thứ hai sai vì nó khai báo một con trỏ tới void
mảng con trỏ.
Tôi là một lập trình viên xuất sắc, rất giỏi!