Cấu trúc lƣu trữ của mảng một chiều

Một phần của tài liệu Bài giảng Các kĩ thuật lập trình: Phần 1 (Trang 30 - 32)

Cấu trúc lƣu trữ của mảng: Mảng đƣợc tổ chức trong bộ nhớ nhƣ một vector, mỗi thành phần của vector đƣợc tƣơng ứng với một ô nhớ có kích cỡ đúng bằng kích cỡ của kiểu phần tử và đƣợc lƣu trữ kế tiếp nhau trong bộ nhớ. Nếu chúng ta có khai báo mảng gồm n phần tử thì phần tử đầu tiên là phần tử thứ 0 và phần tử cuối cùng là phần tử thứ n - 1, đồng thời mảng đƣợc cấp phát một vùng không gian nhớ liên tục có số byte đƣợc tính theo công thức:

Kích_cỡ_mảng = ( Số_phần_tử * sizeof (kiểu_phần_tử).

Chẳng hạn trong có khai báo:

int A[10]; Khi đó kích cỡ tính theo byte của mảng là :

float B[20]; => mảng đƣợc cấp phát: 20 * sizeof(float) = 80byte;

Chƣơng trình dịch của ngôn ngữ C luôn qui định tên của mảng đồng thời là địa chỉ phần tử đầu tiên của mảng trong bộ nhớ. Do vậy, nếu ta có một kiểu dữ liệu nào đó là Data_type, tên của mảng là X, số phân tử của mảng là N thì mảng đƣợc tổ chức trong bộ nhớ nhƣ sau:

Data_type X[N];

X - là địa chỉ đầu tiên của mảng. X = &X[0] = ( X + 0 );

&X[1] = ( X + 1 );

. . .

&X[i] = (X + i );

Ví dụ 2.1. Kiểm tra cấu trúc lƣu trữ của mảng trong bộ nhớ của mảng một chiều.

#include <stdio.h> void main(void) {

int A[10], i ; /* khai báo mảng gồm 10 biến nguyên */

printf(“\n Địa chỉ đầu của mảng A là : %p”, A);

printf(“\n Kích cỡ của mảng : %5d byte”, 10 * sizeof(int));

for ( i =0 ; i <10; i ++){

printf(“\n Địa chỉ phần tử thứ %5d : %p”, i, &A[i]); }

}

Kết quả thực hiện chƣơng trình:

Địa chỉ đầu của mảng: FFE2

Kích cỡ của mảng : 20 Địa chỉ phần tử thứ 0 = FFE2 Địa chỉ phần tử thứ 1 = FFE4 Địa chỉ phần tử thứ 2 = FFE6 Địa chỉ phần tử thứ 3 = FFE8 Địa chỉ phần tử thứ 4 = FFEA Địa chỉ phần tử thứ 5 = FFEC Địa chỉ phần tử thứ 6 = FFEE Địa chỉ phần tử thứ 7 = FFF0 Địa chỉ phần tử thứ 8 = FFF2 Địa chỉ phần tử thứ 9 = FFF4

Ví dụ 2.1 in ra địa chỉ của các phần tử trong mảng A gồm 10 phần tử nguyên. Kết quả nhƣ đƣợc đƣa ra ở trên cho ta thấy địa chỉ của mảng trong bộ nhớ trùng với địa chỉ của

phần tử A[0] đều bằng FFE2, tiếp đến các phần tử đƣợc lƣu trữ kế tiếp và cách nhau đúng bằng kích cỡ của kiểu int. Bạn đọc có thể dùng chƣơng trình đơn giản này để kiểm tra cấu trúc lƣu trữ của mảng cho các kiểu dữ liệu khác.

Một phần của tài liệu Bài giảng Các kĩ thuật lập trình: Phần 1 (Trang 30 - 32)