Tôi có ma trận như vậy trong chương trình của tôi:C++ đúc tĩnh hai chiều mảng đôi tăng gấp đôi **
double m[3][4] =
{
{2, 4, 5, 7},
{4, 5, 1, 12},
{9, 12, 13, -4}
};
Và tôi muốn bỏ nó vào double**
loại.
Tôi đã cố gắng đơn giản double** a = (double**)m;
, nhưng nó không hoạt động (khi tôi cố gắng đọc bất kỳ giá trị, tôi nhận được "sự vi phạm truy cập vị trí đọc 0x00000000.", Có nghĩa là tôi đang cố gắng để đọc từ NULL
địa chỉ.
tôi thấy gần như giải pháp làm việc:
double *b = &m[0][0];
double **c = &b;
Nó hoạt động khi tôi đọc lĩnh vực c[0][any]
Nhưng cùng NULL địa chỉ vấn đề đọc xảy ra, khi tôi cố gắng đọc giá trị từ lĩnh vực c[1][0]
Cách thích hợp để đúc mảng double m[3][4]
của tôi là gì để nhập double**
?
chỉnh sửa: Bạn nói điều đó là không thể. Vì vậy, tôi sẽ thay đổi một chút vấn đề. Làm thế nào tôi có thể vượt qua mảng hai chiều như một tham số cho một chức năng? Hàm của tôi có nguyên mẫu:
void calculate(double **matrix, int n); //where matrix size is always n by n+1
Và nó hoạt động tốt với mảng được phân bổ động. Tôi nghi ngờ rằng cách duy nhất để làm cho nó hoạt động được phân bổ mảng động mới và sao chép mảng tĩnh ban đầu một yếu tố khác ...
Đúc sẽ không thực hiện công việc này. Một 'double **' đòi hỏi một con trỏ tới một con trỏ tới một double, và đó không phải là những gì bạn có. Bạn có thể * có thể * nhận được bằng một 'double *' và rõ ràng truyền các kích thước mảng mặc dù. –
Một mảng các mảng và một con trỏ tới một con trỏ không giống nhau. Bố cục trong bộ nhớ không khớp nên không thể sử dụng bố cục cho bộ nhớ khác. –
Sử dụng kỹ thuật mà Vaughn Cato đề xuất. Nếu nó cần một 'double **', bạn cần phải cho nó một 'double **' và không phải là mảng hai chiều. –