Giả sử rằng chức năngChức năng cần mảng riêng cho không gian làm việc - thực hành tốt nhất?
void foo(int n, double x[])
loại n-vector x
, hiện một số hoạt động trên x
, và sau đó khôi phục lại trật tự ban đầu để x
trước khi trở về. Vì vậy, nội bộ, foo
cần một số bộ nhớ tạm thời, ví dụ: ít nhất một vectơ của số nguyên sao cho nó lưu trữ thứ tự ban đầu.
Cách tốt nhất để xử lý bộ nhớ tạm thời này là gì? Tôi có thể nghĩ đến hai cách tiếp cận rõ ràng:
foo tuyên bố không gian làm việc riêng của mình bằng cách tuyên bố một mảng nội bộ, tức là ở phía trên cùng của
foo
chúng tôi cóint temp[n];
trong các thói quen gọi điện thoại chính, tự động phân bổ n-vectơ của ints một lần và chuyển vào bộ nhớ trong mỗi cuộc gọi đến phiên bản
foo
chấp nhận bộ nhớ tạm thời dưới dạng số 3 arg, tức là,double *temp = malloc(n*sizeof(double)); foo(n, x, temp);
Tôi lo lắng rằng phương án 1 là không hiệu quả (chức năng foo
sẽ được gọi nhiều lần với cùng n
), và phương án 2 là chỉ đơn giản xấu xí, vì tôi phải mang theo lưu trữ tạm thời này để nó luôn có sẵn ở bất cứ nơi nào tôi cần để gọi đến foo(n,x)
.
Có các tùy chọn thanh lịch nào khác không?
+1. BTW, nếu lưu trữ là 'n' cụ thể,' int n' có thể được cuộn vào ngữ cảnh, để rút ngắn danh sách đối số thành 'foo()'. –