MẢNG & CON TRỎ
MẢNG & CON TRỎ
NỘI DUNG
CON TRỎ
MẢNG 1 CHIỀU
MẢNG 2 CHIỀU
C
1. CON TRỎ
Hình dung sâu hơn về
biến trong bộ nhớ máy
tính…
ĐOÁN???
1. CON TRỎ
…
306
305
304
303
302
301
300
299
…
0
char b;
int a;
a=5;
a++;
1 byte
b
a
56
1. CON TRỎ
int a=5;
int * p;
p=&a;
In p ?
In &a ?
In &p ?
In *p ?
104
…
0
100
23
a=5
p=100
1. CON TRỎ
1. Cấp phát vùng nhớ khi chương trình đang chạy.
2. Trỏ tới 1 vùng nhớ
Tại sao cần con trỏ?
1. CON TRỎ
Cấp phát bộ nhớ cho con trỏ:
•
int* p = (int*) malloc (sizeof(int));
•
int* p = (int*) calloc (1, sizeof(int));
•
int* p = new int;
Giải phóng vùng nhớ:
•
free p;
•
delete p;
#include <stdlib.h>
1. CON TRỎ
Sự khác biệt về cách sử dụng con trỏ của 2 chương trình?
1. CON TRỎ
Bài tập:
•
Cho giá trị của c?
•
Viết lại biểu thức: y=2*x + 4*z bằng cách sử dụng con trỏ?
2. MẢNG 1 CHIỀU
Cần lưu điểm môn MNLT của 5 sinh viên:
Có thể khai báo gọn hơn mà vẫn đủ 5 biến ta cần?
Dùng mảng 1 chiều: int d[5];
int d0;
int d1;
int d2;
int d3:
int d4;
Hazzi…!
2. MẢNG 1 CHIỀU
Định nghĩa mảng 1 chiều:
•
Truy xuất phần tử của mảng thông qua chỉ số.
•
Phần tử thứ n: a[n-1]
Ví dụ: int a[5];
int temperatures[5];
Dùng mảng 1 chiều làm chi?
int int int int int
a0 a1 a2 a3 a4
Array element
34 35 37 42 50
a
2. MẢNG 1 CHIỀU
Bài tập mảng 1 chiều:
•
Nhập vào mảng số nguyên.
•
Nhập mảng có n phần tử.
•
Sắp xếp mảng tăng dần. Xuất mảng đã sắp xếp ra mảng hình.
•
Nửa sau giảm dần.
•
Kiểm tra xem mảng có đối xứng hay không.
3. MẢNG 2 CHIỀU
Định nghĩa mảng 2 chiều:
Ví dụ: int a[3][4]; //khai báo mảng 2 chiều
•
Truy cập vào 1 phần tử của mảng: a[0][1], a[1][2], …
•
Chỉ số dòng, cột bắt đầu từ 0.
int int int int
int int int int
int int int int
cột 0 cột 1 cột 2 cột 3
Dòng 0
Dòng 1
Dòng 2
3. MẢNG 2 CHIỀU
Bài tập:
•
Nhập vào 1 ma trận các số nguyên.
•
Xuất ma trận ra màn hình.
•
Tìm phần tử lớn nhất trong ma trận đó.
•
Tìm phần tử lớn nhất ở mỗi dòng của ma trận.