2016-02-02 29 views
6

Tôi có một mảng nhưBắt mảng một chiều từ một mảng hai chiều

int outer[4][3] = { 
    { 1, 2, 3 }, 
    { 2, 3, 5 }, 
    { 1, 4, 9 }, 
    { 10, 20, 30 } 
}; 

và tôi muốn để có được một con trỏ/mảng cho mảng một chiều n-thứ bên trong outer, một cái gì đó như

void foo() { 
    printf("%d %d %d\n", outer[1][0], outer[1][1], outer[1][2]); 
    int inner[3] = outer[1]; /* Is there some way to do this assignment? */ 
    printf("%d %d %d\n", inner[0], inner[1], inner[2]); 
    /* so that this line gives the same output as the first */ 
} 

Tất nhiên điều này là có thể với toán học con trỏ, nhưng tôi cảm thấy có một số cú pháp cho điều này mà tôi đã quên.

+7

int * inner = & outer [1] [0]; – user3528438

Trả lời

6

Đối với con trỏ đến mảng, kê khai inner như một con trỏ đến một mảng của 3 int

int (*inner)[3] = &outer[1]; 


Nếu bạn muốn có một con trỏ đến phần tử đầu tiên của mảng outer[1] sau đó

int *inner = outer[1]; 

sẽ thực hiện công việc. Bạn cũng có thể làm

int *inner = &outer[1][0]; 
+0

Công trình thứ hai hoạt động. Cảm ơn! – Charles

+0

@Charles; Bạn đã yêu cầu trong nhận xét (đã xóa ngay bây giờ) cho con trỏ tới mảng. – haccks

+0

Xin lỗi vì sự nhầm lẫn. Tôi sẽ chấp nhận sau 2 phút nữa. – Charles

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