Giáo trình ngôn ngữ C



tải về 2.34 Mb.
Chế độ xem pdf
trang55/62
Chuyển đổi dữ liệu16.03.2023
Kích2.34 Mb.
#54376
1   ...   51   52   53   54   55   56   57   58   ...   62
C ĐHQGHN

int D[3][4];
Giả sử D được cấp phát tại vùng nhớ có địa chỉ 100 thì các phần tử của D như sau: 
 
¾
Hạn chế số phần tử của mảng 
Tuy rằng ngôn ngữ không đưa ra con số cụ thể giới hạn các phần tử của mảng, nhưng 
kích thước của mảng bị hạn chế bởi các yếu tố sau: 
à
Các phần tử mảng được cấp phát liên tiếp, trong 1 đoạn bộ nhớ (64kb), do vậy 
tổng kích thước của mảng 
≤ 64kb (số_pt × sizeof(kiểu_mảng) ≤ 65535)
 
à
Kích thước mảng có thể cấp phát phụ thuộc lượng bộ nhớ tự do mà chương trình 
dịch có thể cấp phát được.
 
Ví dụ nếu bộ nhớ tự do (trong 1 đoạn) có thể cấp phát còn lại là 100 byte thì nếu là 
mảng nguyên 1 chiều kiểu int thì kích thước tối đa có thể là 50, với mảng một chiều 
kiểu float thì chỉ có thể là 25 phần tử,..
 
V.4.3 - Liên hệ giữa con trỏ và mảng
 
Trong C con trỏ và mảng có liên hệ rất chặt chẽ với nhau, như trên chúng ta biết tên 
mảng là một hằng con trỏ. Hơn nữa các phần tử của mảng có thể được truy xuất thông qua 
chỉ số hoặc thông qua con trỏ. 


Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
 C
85
Như trên chúng ta biết, mảng được cấp phát tại vùng nhớ nào đó và địa chỉ của vùng 
nhớ đó chính là địa chỉ của mảng. Tên mảng là con trỏ trỏ tới chính địa chỉ của nó hay 
nói khác tên mảng là con trỏ lưu địa chỉ của mảng, nhưng là hằng con trỏ. Chúng ta giải 
thích cụ thể hơn qua ví dụ sau: 
Ví dụ với khai báo 
int A[3], D[2][5]; 
 
thì A, D là các con trỏ và: A chính là địa chỉ của mảng A, hay bằng &A[0]; tương tự cho 
mảng D ta cũng có D 
⇔ &D[0]. 
Và theo như cách gọi của con trỏ thì ta nói A là con trỏ trỏ tới phần tử đầu tiên của mảng. 
Với mảng hai chiều D thì cũng tương tự, D cũng là một con trỏ trỏ tới D[0], và D[0] lại là 
một con trỏ trỏ tới D[0][0], có thể nói D là con trỏ trỏ tới con trỏ. 
Như vậy A là mảng kiểu int tức là các phần tử của nó có kiểu int, và như vậy A là con 
trỏ kiểu int, hay A có kiểu là int *.
Tương tự, D[i] (nó chung là các hàng của mảng D) là con trỏ kiểu int, tức là D[i] có 
kiểu là int *, và D là con trỏ trỏ tới D[0] - Các D[i] là mảng int[5], vậy D là con trỏ kiểu 
int [5].
Tên mảng có thể gán cho các (biến) con trỏ có kiểu phù hợp. 
Ví dụ: với các con trỏ và mảng sau 
int 
A[10]; 
int 
D[2][4]; 
int 
*p; 
int (*q)[4]; // khai báo q là con trỏ kiểu int [4],
chúng ta có thể thực hiện các phép gán sau: 
p = A; 
q = D; 
p = D[i]; 
¾

tải về 2.34 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   51   52   53   54   55   56   57   58   ...   62




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương