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!
- Cơ sở lập trình - Trường ĐH Thương mại - 5
- Cơ sở lập trình - Trường ĐH Thương mại - 6
- Cơ sở lập trình - Trường ĐH Thương mại - 7
- Cơ sở lập trình - Trường ĐH Thương mại - 9
- Cơ sở lập trình - Trường ĐH Thương mại - 10
- Cơ sở lập trình - Trường ĐH Thương mại - 11
Xem toàn bộ 113 trang tài liệu này.
▪ Truy xuất đối với mảng hai chiều
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;
Và
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