Nhận làm đồ án VĐK các loại ( 8051, AVR, PIC) Tư vấn - Hướng dẫn - lập trình

Thứ Sáu, 27 tháng 3, 2015

Con trỏ Ngôn Ngữ C

GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH C

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ỏ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*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 tên mảng, ichỉ 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

Next previous home

0 nhận xét:

Đăng nhận xét