2015-11-05 22 views
5

Tiếp theo đoạn mã:Tham chiếu không tham chiếu ở bất kỳ đâu?

int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 
int(&row)[4] = ia[1]; 

enter image description here

Tôi không thể lấy đầu của tôi xung quanh lý do tại sao mã đặc biệt này là hợp lệ. Đối với sự hiểu biết hiện tại của tôi, tôi không có một lời giải thích hợp lý. Ai đó có thể giúp tôi với điều đó không? Vấn đề của tôi là với &row mà dường như không đề cập đến bất cứ đâu. Lời giải thích duy nhất của tôi là điều này phải hợp lệ vì nó khởi tạo.

Tôi đã có lời giải thích sau đây từ cuốn sách của tôi:

.... chúng ta định nghĩa hàng như một tham chiếu đến một mảng của Bốn ints

Những mảng? Cái mà chúng ta sắp khởi tạo?

Trả lời

13
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 

Là một mảng gồm 3 phần tử, mỗi phần tử là một mảng gồm 4 int.

int(&row)[4] = ia[1]; 

Đây là phần tham chiếu có tên có thể tham chiếu một mảng gồm 4 int. các = ia[1] khởi tạo nó để tham chiếu phần tử thứ hai trong mảng ia, là một mảng gồm 4 int.

+0

"Ở đây phần int (& row) [4] khai báo một hàng có tên tham chiếu có thể tham chiếu một mảng gồm 4 int." - điều này có nghĩa là nó chỉ có thể nhưng nó không? Hay nó chỉ vào mảng mà là nhận được initalised? – HansMusterWhatElse

+1

@KingJulian Nó có thể thực hiện, bạn khởi tạo nó (phần '= ia [1]' để tham chiếu (hoặc trỏ tới nếu bạn muốn, nhưng từ "trỏ tới" thường được sử dụng với con trỏ, không phải tham chiếu) một mảng gồm 4 int. Có lẽ bạn cần đọc qua ví dụ: [this] (http://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in). – nos

6
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 

ia là mảng gồm 3 mảng 4 int mỗi.

ia[0]{ 0, 1, 2, 3 }.

ia[1]{ 4, 5, 6, 7 }.

ia[2]{ 8, 9, 10, 11 }.

Tôi không hiểu tại sao bạn nói rằng chúng tôi sẽ "sắp khởi tạo" nó - tại thời điểm này, ia được khởi tạo hoàn toàn.

int(&row)[4] = ia[1]; 

Spiral rule (bắt đầu với nhận dạng ...):

row

... là một ...

(&row)

... tham khảo .. .

(&row)[4]

... để một mảng bốn ...

int(&row)[4]

... int ...

= ia[1];

... khởi tạo bởi ia[1] (vì bạn để khởi tạo một tài liệu tham khảo, không có cách nào xung quanh nó).

Vì vậy, row hiện là tham chiếu đến ia[1], thuộc loại "mảng bốn int". Thats tất cả để có nó.

0

(& hàng) [4] có nghĩa là nó có thể tham chiếu đến một mảng gồm 4 phần tử và ia [1] là một hàng từ mảng 2d ia [] [] có chứa 4 phần tử, do đó nó hoạt động tốt.

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