Sử dụng sizeof(float) * filter_len
trừ khi bạn đang làm việc trong một số triển khai lẻ tại đây sizeof(float) == sizeof(char)
.
memset(delay_line, 0, sizeof(float) * filter_len);
Edit: Theo Stephan202 điểm ra trong các ý kiến, 0.0 là một giá trị dấu chấm động đặc biệt dễ dàng để mã cho memset kể từ khi tiêu chuẩn đại diện IEEE cho 0.0 là tất cả zero bit.
memset đang hoạt động trong lĩnh vực bộ nhớ chứ không phải là lĩnh vực số. Tham số thứ hai, khai báo một int, được gán cho một unsigned char. Nếu việc bạn triển khai C++ sử dụng bốn byte cho mỗi phao, các mối quan hệ sau đây giữ:
- Nếu bạn nhớ phao bằng 0, giá trị sẽ là 0,0.
- Nếu bạn ghi nhớ phao bằng 1, giá trị sẽ là 2,36943e-38.
- Nếu bạn ghi nhớ phao với 42, giá trị sẽ là 1.51137e-13.
- Nếu bạn ghi nhớ phao với 64, giá trị sẽ là 3.00392.
Vì vậy, số không là trường hợp đặc biệt.
Nếu điều này dường như đặc biệt, nhớ lại memset được khai báo trong <CString> hoặc <string.h>, và thường được sử dụng để làm những thứ như "***************" hoặc là "------------------". Rằng nó có thể cũng được sử dụng để bộ nhớ zero là một tác dụng phụ tiện lợi.
Như Milan Babuškov chỉ ra trong các nhận xét, có một chức năng bzero (không chuẩn và không được chấp nhận), có sẵn cho thời điểm trên Mac và Linux nhưng không phải Microsoft, vì nó được thiết kế đặc biệt để đặt bộ nhớ về không, an toàn bỏ qua một vài hướng dẫn. Nếu bạn sử dụng nó, và một bản phát hành trong tương lai của trình biên dịch của bạn sẽ bỏ sót nó, bạn không thể tự mình thực hiện bzero trong bản vá tương thích cục bộ, trừ khi bản phát hành tương lai có sử dụng lại tên cho một số mục đích khác.
Nguồn
2009-05-18 12:06:25
Nếu không, bạn không thể sử dụng véc tơ, đây là cách C++ hiện đại, an toàn nhất để thực hiện. memset có thể nhanh hơn, nhưng nó chỉ là 0 byte không có kiểm tra kiểu, nếu bạn nhận được toán học của bạn sai bạn đang gặp rắc rối. – iain
Tôi đồng ý về fill_n là phương thức ưa thích, ngay cả khi nó hơi chậm hơn (và tôi chỉ tin rằng khi tôi nhìn thấy nó;) Trái ngược với memset, phương pháp này vừa an toàn vừa dễ dàng hơn. có thể sử dụng phương pháp này để khởi tạo 4.2 ví dụ) – Pieter