Cơ sở lập trình - Trường ĐH Thương mại - 8

Cách truy xuất phần tử trong mảng

name[chỉ_số]

Vai trò: mỗi phần tử làm việc như một biến đơn lẻ

Ví dụ

int a[5]; a[2]=8;

Lưu ý

Trong ngôn ngữ C các phần tử của mảng được đánh số bắt đầu

từ 0

Truy xuất phần tử ngoài phạm vi: không bị báo lỗi nhưng giá trị của phần tử đó sẽ không kiểm soát được.

Tên của mảng tương ứng với địa chỉ phần tử đầu tiên của nó.

Có thể bạn quan tâm!

Xem toàn bộ 113 trang tài liệu này.

Truy xuất đối với mảng hai chiều


Cơ sở lập trình - Trường ĐH Thương mại - 8

7/2020 Cơ sở lập trình 113



Làm việc với các phần tử của mảng: dùng câu lệnh for để duyệt các phần tử của mảng với biến điều khiển chạy theo chỉ số của mảng.

Ví dụ: Làm việc với dãy số

Nhập dãy số

In dãy số

Đếm số phần tử chia hết cho 5.

Tính tổng các phần tử chẵn.

Sắp xếp dãy

7/2020 Cơ sở lập trình 114

3.2.1 Khái quát về con trỏ

3.2.2 Các phép toán trên con trỏ

3.2.3 Con trỏ và mảng


7/2020 Cơ sở lập trình 115


Khái niệm: Con trỏ là một kiểu dữ liệu trong đó miền giá

trị là địa chỉ các vùng nhớ .

Khai báo:

<Type> *<name>;

Trong đó:

Trong đó Type là kiểu dữ liệu của vùng nhớ được trỏ tới

Mỗi kiểu địa chỉ có một kiểu con trỏ tương ứng.

Sau khi khai báo nhưng chưa được chỉ định trỏ vào đâu

thì con trỏ mang giá trị NULL

7/2020 Cơ sở lập trình 116

Ví dụ

int *number;

char *character; float *greatnumber;

Lưu ý

Chiếm một lượng bộ nhớ như nhau (kích thước của

một biến con trỏ tùy thuộc vào hệ điều hành)

Nhưng dữ liệu mà chúng trỏ tới không cùng kích

thước bộ nhớ.


7/2020 Cơ sở lập trình 117


Sử dụng: phân biệt giá trị và địa chỉ của con trỏ

Ví dụ

Int *p;

p chứa địa chỉ các vùng nhớ

*p chứa giá trị trong các vùng nhớ mà nó trỏ đến

Nhập giá trị cho các biến trỏ

C1: sử dụng phép gán hoặc khởi tạo ban đầu

C2: sử dụng các hàm cấp phát động

7/2020 Cơ sở lập trình 118

Khởi tạo con trỏ: để chỉ định rõ ràng con trỏ sẽ

trỏ tới biến nào khi khai báo

Ví dụ

int cat;

int *tommy = &cat;

Tương đương với:

int cat;

int *tommy; tommy = &cat;


7/2020 Cơ sở lập trình 119


Cấp phát bộ nhớ cho con trỏ

Thư viện: alloc.h

Hàm cấp phát: malloc/ calloc/realloc

Cú pháp

<name> = <(type*)>malloc(size);// dùng cho các kiểu dl cơ sở

<name> = <(type*)>calloc(n,sizeof (type));//dùng cho kiểu dl

người dùng định nghĩa

<name> = <(type*)>realloc(buf_ptr,newsize);//cấp phát lại

7/2020 Cơ sở lập trình 120

Ví dụ: so sánh

int *ptr;

ptr = (int *) malloc(sizeof(int)); int x = 5;

*ptr = x;

int *ptr; int x = 5; ptr = &x;

Lưu ý: khi gán con trỏ chúng ta phải luôn luôn gán địa chỉ

mà nó trỏ tới chứ không phải là giá trị mà nó trỏ tới.

7/2020 Cơ sở lập trình 121


Phép so sánh

Phép cộng con trỏ với số nguyên

Phép trừ hai con trỏ


7/2020 Cơ sở lập trình 122

Phép so sánh: là phép so sánh địa chỉ mà con trỏ

lưu giữ

Phép cộng con trỏ với số nguyên

Ptr là con trỏ kiểu T, k là số nguyên thì (Ptr+k) là con trỏ kiểu T. Ptr trỏ tới phần tử t thì (Ptr+k) trỏ tới phần tử cách t một khoảng là k ( k<0 về miền địa chỉ lớn hơn và k<0 về miền địa chỉ nhỏ hơn)

Phép trừ

p, q là hai con trỏ kiểu T thì p-q là số nguyên chỉ số phần tử kiểu T nằm giữa hai phần tử do p và q trỏ tới.

7/2020 Cơ sở lập trình 123


Giống nhau: Tên của một mảng/con trỏ tương đương với địa chỉ phần tử đầu tiên

Khác nhau: địa chỉ của mảng cố định (con trỏ hằng) còn vùng nhớ con trỏ trỏ tới có thể thay đổi (con trỏ thường).

Ví dụ

int numbers [20], *p;

p = numbers; //hợp lệ

numbers = p; //không hợp lệ


7/2020 Cơ sở lập trình 124

Mối liên hệ

Các phần tử của mảng có thể được truy xuất thông qua

chỉ số hoặc con trỏ. (a+i)&a[i], *(a+i) a[i]

Ví dụ: a[5] = 0; hoặc *(a+5) = 0;

Với mảng 2chiều

a là con trỏ trỏ tới a[0] và a[0] trỏ tới a[0][0]

a[0] &a[0][0] và * a[0] a[0][0] hay **a a[0][0]

(a+i ) &a[i] và a[i]&a[i][0]

*a[i]a[i][0] hay *(*a+i) a[i][0] a[i]+j &a[i][j]

*( a[i]+j) a[i][j] hay *(*a +i+j) a[i][j]

7/2020 Cơ sở lập trình 125


3.3.1 Khái niệm

3.3.2 Một số hàm xử lý xâu


7/2020 Cơ sở lập trình 126

Khái niệm

Xâu là một mảng các kí tự kể cả khoảng trắng.

Một hằng xâu có nội dung được đặt trong cặp dấu “ ” và

kết thúc xâu là kí tự ‘’ hay còn gọi là kí tự NULL

Lưu ý

Kí tự ‘a’ khác với xâu “a”.


7/2020 Cơ sở lập trình 127


Khai báo xâu

Dùng mảng kí tự: char a[size];

Dùng con trỏ kí tự: char *str;

Khởi tạo xâu

Dùng mảng hoặc con trỏ

Ví dụ

char a[15] = “hello world”;

hoặc

char *str = (char*) malloc (15*sizeof (char));

char *str=”hello world”;

7/2020 Cơ sở lập trình 128

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 01/10/2023