27 thg 3, 2010

Khai báo mảng động 2 chiều trong C++.

Dùng con trỏ 2 lần được đấy. Ví dụ, muốn tạo một mảng 2 chiều kiểu int cỡ M*N (đại khái tương tự như khai báo "int a[M][N]" trong đó M, N không nhất thiết là hằng), bạn cần
- tạo một mảng 1 chiều x kiểu int cỡ M*N
- tạo một mảng 1 chiều a gồm M con trỏ int
- cho mỗi con trỏ trong a trỏ đến một địa chỉ của một dòng trong X.



Code:

/* ngôn ngữ C */
int *x, **a, i;
x = malloc(M*N*sizeof(int));
a = malloc(M*sizeof(int*));
for(i=0;i
{
a[i] = x+i*N;
}

Sau đó có thể dùng a như một mảng hai chiều, như thế này: a[i][j]


Cách khác là :

Có thể làm như sau.
int **a = (int**)malloc(m*sizeof(int*));
for(int i=0; i
{
a[i] = (int*)malloc(n*sizeof(int));
}
Cách này không hay bằng cách trên. Nhưng dễ nhớ hơn.

0 nhận xét: