Tôi có hai con trỏ cấu trúc tới con trỏ
typedef struct Quảng trường {
...
...
}Quảng trường;
Hình vuông **s1; // Biểu diễn mảng 2D, 100*100
Hình vuông **s2; // Biểu diễn mảng 2D, 200*200
Cả hai đều được sử dụng malloc()
được phân bổ trên heap. Tôi đã khởi tạo với một số giá trị s1
, được khởi tạo đầy đủ với các giá trị mặc định s2
. Về cơ bản, tôi cần chuyển đổi s1
được thay đổi kích thước thành s2
kích thước trong khi vẫn duy trì (s1
) và các giá trị "được thêm vào" sẽ là s2
- giá trị mặc định.
Tôi đã viết câu hỏi nàymemcpy() từ mảng nhỏ hơn đến mảng lớn hơnNhưng có vẻ như tôi đang nhầm lẫn giữa mảng và con trỏ/
Câu hỏi của tôi là, làm thế nào để chuyển đổi s1
được thay đổi kích thước thành s2
kích cỡ. Tôi không phải giữ con trỏ thô. Nếu đây là cách tiếp cận tốt hơn tôi có thể đặt s1
Sao chép vào s2
và trở lại s2
Tôi hy vọng tôi đã giải thích chính xác những gì tôi đang theo đuổi. Cảm ơn!
Mảng hai chiều được sắp xếp trong bộ nhớ theo thứ tự: row1 row2 row3, v.v.
memcpy thực hiện sao chép tuyến tính từ vị trí bộ nhớ này sang vị trí bộ nhớ khác.
Vì vậy, để đạt được những gì bạn cần:
a) Tạo một mảng mới
Hình vuông **s3 = malloc(sizeof(s2));
b) Copy s2 vào đó
c) Sao chép nội dung của s1 từng dòng sang mới
for(r = 0; r < NROWS_S1; r++)
memcpy(s3[r], s1[r], sizeof(Square) * NCOLS_S1);
http://www.fredosaurus.com/notes-cpp/arrayptr/23two-dim-array-memory-layout.html
Tôi là một lập trình viên xuất sắc, rất giỏi!