Chào các bạn, chúng ta lại cùng nhau tiếp tục loạt
bài 3 với ngôn ngữ lập trình C. Trong bài 3 này như đã nói ở bài trước tôi sẽ
giới thiệu tới các bạn 2 vấn đề đó là con Trỏ và mảng trong C.
V. Con trỏ
5.1. Giới thiệu qua về kiến
trúc máy tính
Bộ nhớ RAM chứa rất
nhiều ô nhớ, mỗi ô nhớ có kích thước 1 byte.
RAM dùng để chứa một phần hệ điều hành, các lệnh
chương trình, các dữ liệu …
Mỗi ô nhớ có địa chỉ duy nhất và địa chỉ này được
đánh số từ 0 trở đi.
Ví dụ :
·
RAM 512 MB
được đánh địa chỉ từ 0 đến 229-1
·
RAM 2G
được đánh địa chỉ từ 0 đến 231-1
Quá trình xử lí của trình biên dịch:
·
Dành riêng một
vùng nhớ với địa chỉ duy nhất để lưu biến đó.
·
Liên kết địa
chỉ ô nhớ đó với tên biến.
·
Khi gọi tên biến, nó sẽ truy xuất tự động đến ô nhớ đã
liên kết với tên biến
5.2. Con trỏ
Là một biến dùng để chứa địa chỉ vì địa chỉ có nhiều
loại nên con trỏ cũng có nhiều kiểu giá trị tương ứng.
v Cách khai báo :
·
C1 :
<kiểu
dữ liệu>*<tên biến con trỏ>;
Ví
dụ:
·
C2 : Sử dụng từ
khóa typedef
Typedef <kiểu dữ liệu> *<tên kiểu con trỏ>;
<tên
kiểu con trỏ><tên biến con trỏ>;
Ví
dụ:
Khi mới khai báo, biến con trỏ được đặt ở địa chỉ nào
đó (không biết trước). Nó chứa giá trị không xác định và trỏ đến vùng nhớ không
biết trước.
v Đặt địa
chỉ của biến vào con trỏ (toán tử &)
<tên biến
con trỏ>= &<tên biến>;
Ví
dụ:
v Truy xuất
đến ô nhớ mà con trỏ, trỏ đến
Con trỏ chứa một
số nguyên địa chỉ, vùng nhớ mà nó trỏ đến sử dụng toán tử *
Ví dụ :
5.3. Sử dụng con trỏ
Trong biểu thức ta có thể sử dụng tên con trỏ
hoặc dạng khai
báocủa nó.
v Sử dụng
tên con trỏ :
Con
trỏ là một biến nên trong biểu thức nếu nó xuất hiện thì giá trị của nó sẽ được
sử dụng trong biểu thức này. Trong trường hợp sử dụng tên thì giá trị con trỏ là
giá trị của địa chỉ biến nào đó mà con trỏ, trỏ tới.
Vi
dụ :
int a ,
*P;
P = &a;
b = a +
P; với P tương đương &a
Cũng
giống như các biến khác, nội dung của con trỏ có thể thay đổi do đó ta có thể
thay đổi được địa chỉ biến mà con trỏ , trỏ tới.
VD
: Con trỏ P
chứa địa chỉ phần
tử mảng A[i] sau khi thực hiện ++P nó sẽ chứa địa chỉ phần tử mảng A[i+1]
v Sử dụng khai báo của
con trỏ :
Con trỏ
ngoài việc thay đổi địa chỉ biến dựa vàotên. Nó
còn thay đổi được giá trị của biến đó nhờ sử dụng
khai báo.
Ví
dụ :
int x,y;
int *Px, *Py;
int b;
Px=&x;
Py=&y;
Ta
sẽ có cách viết x
hay *Pxlà
tương đương, hay y và *Py cũng như vậy
y=3*x +
b;
y=3*(*Px)
+ b;
*Py=3*(*Px) + b;
VI. Mảng
Là một kiểu dữ liệu có cấu trúc do người lập trình định
nghĩa.
Biểu diễn 1 tập hợp gồm nhiều biến có cùng kiểu dữ
liệu và cùng tên. Khi đó mỗi phần tử của mảng sẽ được truy xuất thông qua chỉ số.
A[i] :Trong đó A là tên
mảng, i
là chỉ số mảng (có giá trị kiểu nguyên int)
6.1. Cách khai báo
Có 2 cách khai báo mảng :
v Cách 1:
Tường minh
<kiểu dữ liệu><tên biến mảng>[<số phần tử>];
<kiểu dữ liệu><tên biến mảng>[<N1>][<N2>]…[<Nn>];
Với <N1>, …, <Nn> : Là số
lượng phần tử mỗi chiều.
Ví dụ:
v Cách 2:
Không tường minh
Typedef<kiểu dữ liệu><tên kiểu mảng>[<số phần tử>];
Typedef<kiểu dữ liệu><tên kiểu mảng>[<N1>] … [<Nn>];
<tên kiểu mảng><tên biến mảng>;
Ví dụ:
6.2. Địa chỉ mảng
Chỉ cho phép lấy địa chỉ mảng
một chiều chứ không cho phép lấy địa chỉ mảng nhiều chiều.
Cú pháp : & tên biến[i];
Ví dụ : &a[6];
v Chú ý:
Tên mảng biểu thị địa chỉ đầu mảng.
Ví
dụ :
a=&a[0];
= > a + i
<=>&a[i];
Do
đó có thể kết luận tên mảng là một hằng địa chỉ
Như vậy chúng ta đã đi xong khái quát cơ bản về con
trỏ và mảng trong C. Ở đây tôi đã giản hóa tối đa tính phức tạp. Chỉ giới thiệu
cơ bản nhất đến để các bạn tham khảo. Con trỏ và mảng trong lập trình C khá
quan trọng và đánh giá là phức tạp nhất. Tuy nhiên trong lập trình C nhúng cho
VĐK chúng ta cũng không quá lo lắng về điều này. Trong bài cuối cùng tôi sẽ giới
thiệu đến các bạn về hàm, cấu trúc chương trình cơ bản trong C và các hệ thống
số trong C (thập phân, nhị phân, thập lục phân …v…v..)
Cám ơn các bạn đã đón xem!
Mọi ý kiến thắc mắc các bạn có thể gửi qua địa chỉ
gmail, hoặc số điện thoại cung cấp từ trang chủ của Blog hoặc comment trực tiếp
phía dưới.
Nếu
copy bài mong bạn đọc để lại nguồn, xin cảm ơn !
Mọi thắc mắc vui lòng liên hệ qua:
Facebook: Rid HaUI
Gmail: dienturid@gmail.com
0 nhận xét:
Đăng nhận xét