C++ strings: [] vs. *
Nhìn vào Excursion: Mảng đa chiều trong đó mô tả cách bạn vượt qua mảng đa chiều để các chức năng như các đối số. Về cơ bản, bạn muốn thay đổi mã của mình thành mã này:
// same as void f(double (*a)[2]) {
void f(double a[][2]) {
}
int main() {
// note. this is not a pointer to a pointer,
// but an array of arrays (4 arrays of type double[2])
double var[4][2];
// trying to pass it by value will pass a pointer to its
// first element
f(var);
}
Tất cả các kích thước cuối cùng phải được gọi là hàm được gọi. Nếu không lập chỉ mục mảng, trình biên dịch sẽ không thể tính toán khoảng cách chính xác cho các giá trị vào mảng của bạn (một [1] cách sizeof(double[2])
byte từ [0]).
Bạn dường như muốn có thể chấp nhận mảng mà không biết kích thước của các thứ nguyên. Bạn có thể sử dụng các mẫu cho việc này:
template<std::size_t N>
void f(double a[][N]) {
// N == 2 for us
}
int main() {
double var[4][2];
f(var);
}
Trình biên dịch sẽ tạo một bản sao của (thuyết minh) rằng mẫu cho mỗi giá trị của N sử dụng với các chức năng, tính năng tự động suy ra như N. đúng
Nguồn
2008-12-23 23:46:51
Cảm ơn bạn, tôi thích liên kết bạn đã cung cấp cho tôi vì tôi có thể hiểu sâu hơn từ đó. Và cũng là ví dụ mẫu bạn đã cho tôi. nhân đôi [] [2] chính xác là những gì tôi cần trong chương trình cụ thể của tôi. – Ezequiel