Tôi sẽ viết những dòng này như:
- (void) testCall: (int *) aMatrice;
Làm như vậy cho phép bạn để tránh nhiều mallocs và toán để tính toán một offset duy nhất trong một mảng tuyến tính dựa trên tọa độ x, y trong một mảng 2D là tầm thường. Nó cũng tránh được nhiều mallocs được ngụ ý bởi int ** và những hạn chế của cú pháp mảng 2D được duy trì bởi ngôn ngữ.
Vì vậy, nếu bạn muốn có một mảng 4x5, bạn có thể làm:
#define WIDTH 4
#define HEIGHT 5
#define INDEXOF(x,y) ((y*WIDTH) + x)
int *myArray = malloc(sizeof(int) * 5 * ELEMS_PER_ROW);
Sau đó, bạn có thể khởi tạo mảng tuyến tính hoặc với một lồng nhau vòng lặp for:
for(int x=0; x<width; x++)
for(int y=0; y<height; y++)
myArray[INDEXOF(x,y)] = ... some value ...;
Và bạn sẽ vượt qua nó theo phương pháp như:
[foo testCall: myArray];
Mặc dù bạn cũng có thể muốn mang theo chiều rộng và chiều cao hoặc bette Tuy nhiên, tạo ra một lớp con IntMatrix của NSObject kết thúc tốt đẹp tất cả số học con trỏ và lưu trữ ngoài một API sạch đẹp.
(tất cả các mã gõ vào SO)
Đây là một cách rất thông minh để giải quyết nó - cảm ơn. –
Đừng quên 'free()' bộ nhớ sau khi gọi '[foo testCall: myArray];'. –