2012-05-13 36 views
6

Trong C, trong mảng nói A[2][3] thay đổi chỉ số ngoài cùng bên phải dẫn đến một sự thay đổi địa chỉ bộ nhớ nhỏ nhất, ví dụ: các yếu tố được đặt trong bộ nhớ như A[0][0], A[0][1]...mảng chữ nhật vật lý để nhớ

là cũng đúng đối với các mảng hình chữ nhật trong NET? Nếu có, giả sử mảng a[2, 3] là các phần tử nằm trong bộ nhớ là a[0, 0], a[0, 1]...?

+0

Bạn không thể so sánh chính xác so sánh được. Mảng của bạn không thực sự là một mảng 2D, nó là một mảng các mảng. Bạn cũng có thể làm tương tự trong C#: ví dụ: 'int [] []', không phải 'int [,]'. – svick

+0

@svick bạn chỉ đơn giản là sai. –

+0

Không, đó là cách mảng 2D được triển khai trong C. Chúng chỉ là mảng 1 chiều mà các phần tử của chúng là mảng 1 chiều. –

Trả lời

14

Các CLI specification, phần 8.9.1, khẳng định:

phần tử mảng được đặt ra trong đối tượng mảng trong hàng-lớn trật tự (ví dụ, các yếu tố liên quan đến việc bìa phải mảng chiều sẽ đặt ra liên tục từ thấp nhất đến cao nhất chỉ mục). Dung lượng lưu trữ thực được phân bổ cho mỗi phần tử mảng có thể bao gồm phần đệm nền tảng cụ thể.

Vì vậy, câu trả lời là có - đầu tiên bạn sẽ gặp phải tất cả các yếu tố của dòng đầu tiên, sau đó tất cả các yếu tố của hàng thứ hai, vv (như spec nói, điều này được gọi là hàng-lớn để).

+1

Cảm ơn, đã lười biếng để tìm thấy bản thân mình! :) –

Các vấn đề liên quan