Ôn tập kỹ thuật lập trình
GV: Nguyễn Hữu Thể Khoa CNTT – Đại Học Cửu Long
1
NỘI DUNG
1
Hàm và thủ tục
2
Con trỏ
5
2
CTDL1- Nguyễn Hữu Thể
I. Hàm và thủ tục
I.1. Hàm − Khi định nghĩa hàm, ta luôn khai báo tường minh giá trị trả về khi
hàm thực hiện xong.
− Cú pháp:
//Thân hàm
return
3
CTDL1- Nguyễn Hữu Thể
}
I.1. Hàm
Ví dụ: tính tổng 2 số nguyên a, b. Trả về giá trị là tổng 2 số
int TinhTong(int a, int b) {
int TinhTong(int a, int b) {
return (a+b);
int tong; tong = a + b; return tong; }
Gọi hàm trong main()
}
void main() {
int a=4, b=5; printf(“Tong 2 so la: %d”, TinhTong(a,b));
}
int a=4, b=5; int tmp; tmp = TinhTong(a,b); printf(“Tong 2 so:%d” ,tmp);
void main() {
4
CTDL1- Nguyễn Hữu Thể
}
I.2. Thủ tục (Hàm không có giá trị trả về)
− Thủ tục không trả về giá trị, ta dùng từ khóa void để khai báo kiểu
dữ liệu. − Cú pháp:
void
//Thân hàm, xử lý các dữ liệu //Nếu cần biết thông tin dl thì in ra màn hình
5
CTDL1- Nguyễn Hữu Thể
}
I.2. Thủ tục
Ví dụ: tính tổng 2 số nguyên a, b. In kết quả ra màn hình
void TinhTong(int a, int b) {
void TinhTong(int a, int b) {
printf(“%d”,(a+b));
int tong; tong = a + b; printf(“%d”,tong); }
Gọi hàm trong main()
}
void main() {
TinhTong(4,5));
int a=4, b=5; TinhTong(a,b);
}
}
6
CTDL1- Nguyễn Hữu Thể
void main() {
Cách tổ chức mã nguồn trong C
Cách 2: để hàm main sau cùng
#include
Cách 1: khai báo prototype
#include
#include
//khai báo prototype
void TinhTong(int a, int b);
void main()
{
int tong; tong = a + b; printf(“%d”,tong);
int a=4, b=5; TinhTong(a,b); getch();
} void main() {
} void TinhTong(int a, int b) {
int a=4, b=5; TinhTong(a,b); getch();
int tong; tong = a + b; printf(“%d”,tong); }
7
CTDL1- Nguyễn Hữu Thể
}
II. Con trỏ
II.1 Truy cập địa chỉ − Trong các ngôn ngữ lập trình, khi một biến được khai báo, ba thuộc
Nội dung ô nhớ
10
Địa chỉ: FFF0
…
…
…
tính cơ bản sau được liên kết đến nó: (cid:1) Tên định danh của biến (cid:1) Kiểu dữ liệu liên quan (cid:1) Địa chỉ trong bộ nhớ Ví dụ: khai báo biến int n = 10; n là tên định danh của biến, có kiểu int và được lưu trữ đâu đó trong bộ nhớ máy tính.
(cid:1) Xuất:
printf(“%d”,n); //in nội dung biến printf(“%0X”,&n);//in địa chỉ của biến
8
CTDL1- Nguyễn Hữu Thể
II.1 Truy cập địa chỉ
Ví dụ: void main() {
int n=10; printf(“%d”,n); //in nội dung biến printf(“%0X”,&n);//in địa chỉ của biến
}
Kết quả thực hiện như sau:
Ta thấy giá trị của n là 10
• • Địa chỉ biến n theo số hexa là FFF0
9
CTDL1- Nguyễn Hữu Thể
10 FFF0
II.2 Biến tham chiếu
− Dùng một biến khác truy cập đến cùng một địa chỉ với biến đã có, ta
sử dụng biến tham chiếu (references)
− Cú pháp:
(cid:1) (cid:1) (cid:1)
type& alias = name type: kiểu dữ liệu alias: tên biến tham chiếu name: tên của biến mà biến alias tham chiếu đến
void main() {
Kết quả n = 10, r = 10 n= 11, r = 11
int n=10; int& r=n; printf(“n=%d, r=%d”,n,r); n++; printf(“n=%d, r=%d”,n,r);
}
10
CTDL1- Nguyễn Hữu Thể
II.3. Biến con trỏ
− Dùng để lưu địa chỉ bộ nhớ của một đối tượng. − Cú pháp:
(cid:1) (cid:1)
type* var type: kiểu dữ liệu var: biến con trỏ
Ví dụ:
int x=10; int* p; p=&x; //p lưu địa chỉ của x, hay p trỏ đến x
(cid:2) Ghi chú:
(*p): nội dung của p toán tử (*): toán tử đọc nội dung gián tiếp thông qua con trỏ.
11
CTDL1- Nguyễn Hữu Thể
II.3. Biến con trỏ
void main() Ví dụ: {
int x=10; int* p=&x; //p tr? d?n x printf("Dia chi cua x: %0X \n",&x); printf("Noi dung cua x: %d \n",x); printf("Dia chi cua p: %0X \n",&p); printf("Noi dung cua p: %0X",p); printf("Noi dung tai dia chi ma p tro den: %d",*p);
}
Biến
Địa chỉ
Nội dung (giá trị)
x
FFF0 (&x)
10 (x)
p
FFEE (&p)
FFF0 (&x hay p=&x)
12
CTDL1- Nguyễn Hữu Thể
Ví dụ
void main() {
void HoanVi_1(int a, int b) {
int a = 1, b = 2; HoanVi_1(a, b); printf("a = %d",a); printf("b = %d",b);
int tmp = a; a = b; b = tmp;
}
void main() {
}
void HoanVi_2(int *a, int *b) {
int *a = 1, *b = 2; HoanVi_2(a, b); printf("a = %d",*a); printf("b = %d",*b);
int tmp = *a; *a = *b; *b = tmp;
}
void main() {
}
void HoanVi_3(int &a, int &b) {
int a = 1, b = 2; HoanVi_3(a, b); printf("a = %d", a); printf("b = %d", b);
int tmp = a; a = b; b = tmp;
}
13
CTDL1- Nguyễn Hữu Thể
}
II.4. Con trỏ và mảng
− Con trỏ và mảng 1 chiều
(cid:1)
int a[] = {4,5,7,9}; Truy xuất phần tử thứ hai a[1]=5 Sử dụng con trỏ: • •
Tên mảng xem như con trỏ Truy xuất phần tử thứ i: a[i] hay *(a+i)
− Con trỏ và mảng 2 chiều int a[2][3]={{4,5,7}, {9,10,12}};
(cid:1)
Truy xuất phần tử thứ i=1,j=1 là: a[1][1]=10 Sử dụng con trỏ: • •
Tên mảng xem như con trỏ Truy xuất phần tử thứ i,j: a[i][j] hay *(*(a+i)+j)
14
CTDL1- Nguyễn Hữu Thể
Bài tập
1. Cho mảng 1 chiều int a[] = {4,5,7,9}
Viết thủ tục xuất giá trị mảng ra màn hình (sử dụng con trỏ truy xuất mảng).
2. Cho mảng 2 chiều int a[2][3]={{4,5,7},{9,10,12}};
Viết thủ tục xuất giá trị mảng ra màn hình (sử dụng con trỏ truy xuất mảng).
15
CTDL1- Nguyễn Hữu Thể
16