Professional Documents
Culture Documents
NMLT C15 HamNangCao Phan1 in
NMLT C15 HamNangCao Phan1 in
(PHẦN 1)
3 Hàm trả về tham chiếu
&& &&
VC
VC
BB
BB
Các đối số của chương trình VC
VC
BB
BB
Các tham số của hàm main
Các đối số của chương trình Các tham số của hàm main
Hàm main là hàm nên cũng có tham số.
void main(int argc, char *argv[])
Chương trình tự động thực hiện hàm main {
mà không cần lời gọi hàm. …
Î Làm sao truyền đối số? }
Î Khi thực thi tập tin chương trình (.exe), ta Trong đó
truyền kèm đối số. Tất nhiên, hàm main cũng • argc là số lượng đối số (tính luôn tên tập tin
phải định nghĩa các tham số để có thể nhận chương trình)
các đối số này. • argv là mảng chứa các đối số (dạng chuỗi)
NMLT - Hàm nâng cao (phần 1) 3 NMLT - Hàm nâng cao (phần 1) 4
&& &&
VC
VC
BB
BB
Các tham số của hàm main VC
VC
BB
BB
Các tham số của hàm main
Ví dụ Ví dụ
Viết chương trình có tên Cong, nhận 2 đối số Viết chương trình có tên Cong, nhận 2 đối số
x và y và xuất ra giá trị x + y. x và y và xuất ra giá trị x + y.
#include <stdio.h>
#include <stdlib.h> // atoi
Cong.EXE “2912”,
argv = {“Cong.EXE”, 2912 “1706”};
1706 void main(int argc, char *argv[]) {
if (argc == 3) {
int x = atoi(argv[1]);
argc = 3 int y = atoi(argv[2]);
printf(“%d + %d = %d”, x, y, x+y);
}
else
printf(“Sai! VD: Cong 2912 1706”);
}
NMLT - Hàm nâng cao (phần 1) 5 NMLT - Hàm nâng cao (phần 1) 6
&& &&
VC
VC
BB
BB
Các tham số của hàm main VC
VC
BB
BB
Các tham số của hàm main
Ví dụ Ví dụ
Viết chương trình có tên test nhận dữ liệu từ Viết chương trình có tên test nhận dữ liệu từ
tập tin input.txt, xử lý và xuất kết quả ra tập tin tập tin input.txt, xử lý và xuất kết quả ra tập tin
output.txt. output.txt.
#include <stdio.h>
test “input.txt”,
argv = {“test”, input.txt “output.txt”};
output.txt void main(int argc, char *argv[]) {
if (argc == 3) {
// Nhập dữ liệu từ tập tin argv[1]
argc = 3 // Xử lý
// Xuất kết quả ra tập tin argv[2]
}
else
printf(“Sai! VD: test in.txt out.txt”);
}
NMLT - Hàm nâng cao (phần 1) 7 NMLT - Hàm nâng cao (phần 1) 8
&& &&
VC
VC
BB
BB
Hàm có đối số mặc định VC
VC
BB
BB
Hàm có đối số mặc định
&& &&
VC
VC
BB
BB
Hàm có đối số mặc định VC
VC
BB
BB
Hàm có đối số mặc định
Lưu ý Ví dụ
Muốn truyền đối số khác thay cho đối số mặc In thông tin SV trong lớp gồm: họ tên, phái,
định, phải truyền đối số thay cho các đối số lớp, năm sinh
mặc định trước nó. void XuatThongTin(char *hoten, char phai = 0,
char *lop = “TH07”, int namsinh = 1989)
int Tong(int x, int y = 0, int z = 0); {
puts(hoten);
printf(phai == 0? “Nam\n” : “Nu\n”);
int Tong(1, 5); puts(lop);
printf(“%d”, namsinh);
}
int Tong(1, 0, 5);
NMLT - Hàm nâng cao (phần 1) 11 NMLT - Hàm nâng cao (phần 1) 12
&& &&
VC
VC
BB
BB
Hàm có đối số mặc định VC
VC
BB
BB
Hàm có đối số mặc định
&& &&
VC
VC
BB
BB
Chỉ thị tiền xử lý #define VC
VC
BB
BB
Chỉ thị tiền xử lý #define
Định nghĩa hằng ký hiệu Định nghĩa các macro (lệnh gộp - lệnh tắt)
Chỉ thị #define <name> <value> #define <name>(<param-list>) <expression>
Mọi chỗ xuất hiện <name> trong chương trình Mọi chỗ xuất hiện của <name> với lượng tham
nguồn được thay thế bằng <value> để tạo ra số đưa vào phù hợp sẽ được thay thế bởi
chương trình tiền xử lý. <expression> (tham số được thay thế tương
Ví dụ ứng)
• #define MAX 1000 Ví dụ
• #define PI 3.14 • #define showmsg(msg) printf(msg)
• #define message “Hello World\n” • Îshowmsg(“Hello”); Ù printf(“Hello”);
NMLT - Hàm nâng cao (phần 1) 15 NMLT - Hàm nâng cao (phần 1) 16
&& &&
VC
VC
BB
BB
Hàm nội tuyến (inline) VC
VC
BB
BB
Hàm nội tuyến (inline)
&& &&
VC
VC
BB
BB
Hàm nội tuyến (inline) VC
VC
BB
BB
Hàm trả về tham chiếu
Lưu ý Ví dụ
Giảm thời gian thực hiện hàm (gọi và kết thúc). Hàm chỉ trả về giá trị. Ví dụ, x = f();
Giảm không gian bộ nhớ do các hàm con chiếm Vậy, g() = x hợp lệ hay không?
dụng khi hàm được gọi. Î Hợp lệ khi g(x) trả về tham chiếu đến một
Không cho phép các hàm nội tuyến đệ quy. biến (C++)
Phần lớn không cho phép thực hiện nội tuyến Cú pháp
các hàm sử dụng vòng lặp while. <kiểu trả về> &<tên hàm>([<ds tham số>])
{
Chỉ inline các hàm nhỏ, inline các hàm lớn sẽ return <biến>;
gây phản tác dụng (bộ nhớ cho hàm inline chiếm }
giữ sẽ lâu giải phóng hơn).
NMLT - Hàm nâng cao (phần 1) 19 NMLT - Hàm nâng cao (phần 1) 20
&& &&
VC
VC
BB
BB
Hàm trả về tham chiếu VC
VC
BB
BB
Hàm trả về tham chiếu
&& &&
VC
VC
BB
BB
Hàm trả về tham chiếu VC
VC
BB
BB
Hàm trả về tham chiếu
Chú ý Chú ý
Trong trường hợp sau, biến x phải là biến Nếu không muốn sử dụng biến toàn cục, phải
toàn cục Î không nên sử dụng! truyền x ở dạng tham chiếu.
int x; // biến toàn cục int &getx(int x) { // SAI! x là tham trị Î bản sao
return x;
int &getx() }
{
return x; int &getx() {
} int x; // SAI! x là biến cục bộ
return x;
void main() }
{
getx() = 2912; int &getx(int &x) { // ĐÚNG! x là tham chiếu
} return x;
NMLT - Hàm nâng cao (phần 1) 23 } NMLT - Hàm nâng cao (phần 1) 24
&& &&
VC
VC
BB
BB
Hàm trả về tham chiếu VC
VC
BB
BB
Bài tập thực hành