cuốn sách gpt4 ai đã làm

c - 声明: void (*allocators[])(size_t) and void* allocators[] ?有什么区别

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 08:27:34 26 4
mua khóa gpt4 Nike

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ì?

câu trả lời hay nhất

Đ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ỏ.

Về c - khai báo: void (*allocators[])(size_t) và void* allocators[] gì khác nhau, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/29732770/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress