Slide 1 Một số kỹ thuật liên quan đến hàm Nguyễn Văn Khiết Nội dung Tham số hàm main Hàm với tham số mặc định Các kiểu trả về của hàm Hàm inline Con trỏ hàm Tham số hàm main Hàm main có thể nhận vào t[.]
Một số kỹ thuật liên quan đến hàm Nguyễn Văn Khiết Nội dung • • • • • Tham số hàm main Hàm với tham số mặc định Các kiểu trả hàm Hàm inline Con trỏ hàm Tham số hàm main • Hàm main nhận vào tham số • Ví dụ: • int main(int argc, char* argv[]) { printf(“Hello world!”); return 0; } – Argc : số tham số – char* argv[] : mảng tham số hàm main Tham số hàm main • Ví dụ: – Khi chương trình exe thực thi, tham số sau: – baitap.exe hello world – argc=3 – argv[0]=baitap.exe – argv[1]= hello – argv[2]=world Hàm với tham số mặc định • Hàm có tham số mặc định hàm có hay nhiều tham số gán giá trị • Giá trị trở thành giá trị mặc định lời gọi hàm khơng có tham số • Các tham số mặc định phải nằm cuối danh sách hàm số hàm Hàm với tham số mặc định #include int TongKet(int DiemLT, int DiemTH, int DiemCong =0) { return DiemLT+DiemTH+DiemCong; } void main() { printf("Nguyen Van A : %d\n", TongKet(2,5)); printf("Tran Hoang B : %d\n", TongKet(2,2)); printf("Le Van C : %d\n", TongKet(3,5,1)); printf("Vu Thi D : %d\n", TongKet(2,2,1)); } Hàm inline • Hàm inline hàm mà trình biên dịch copy toàn đoạn code định nghĩa hàm vào nơi mà hàm gọi • Cú pháp: inline KDL Tên_Hàm(cácthamsố) { … } Hàm inline • Làm cho chương trình chạy nhanh khơng phải tốn chi phí chuyển đổi thị lệnh gọi hàm kết thúc hàm • Giảm khơng gian nhớ hàm chiếm dụng gọi Hàm inline • Chỉ inline hàm nhỏ, inline hàm lớn gây phản tác dụng Bộ nhớ hàm inline chiếm giữ làm tăng vùng nhớ chiếm đoạn code thực thi Hàm inline inline int (int x, int y) { if (x < y) return x; else return y; } int main(void) { int x=1,y=9; printf("%d\n",min(x,y)); } Hàm trả trỏ • Hàm nhận kết trả trỏ • Nhu cầu nhận trỏ trả – Nhận trỏ tới vùng nhớ – Nhận mảng liệu – Thực thao tác mảng, kết cần trỏ vị trí mảng • Xem phần trả trỏ Con trỏ Hàm trả trỏ Ví dụ: return_pointer.cpp Hàm trả tham chiếu • C++ cho phép hàm trả tham chiếu đến biến khác • Dễ dàng cho việc trả vùng nhớ lớn Hàm trả tham chiếu • Ví dụ #include int x; int& setx() { return x; } int main(void) { setx() = 10; printf("x= %d\n",x); } Hàm với tham số • Hàm có tham số hằng, tức tham số khơng thể thay đổi hàm void func(const int i) { i++; // lỗi biên dịch } Hàm với giá trị trả • Giá trị trả hàm hằng, tức ta thay đổi giá trị trả sau gọi hàm #include const int* test() { static int i = 10; return &i; } int main() { // int* p = test(); // lỗi const int* p = test(); printf("%d\n",); //*test() = 1; // lỗi } Hàm với giá trị trả • Hàm trả khơng có giá trị với kiểu liệu sở #include const int test() { return 1; } int main() { int k = test(); k = 10; printf("%d\n",k); } Con trỏ hàm • Con trỏ hàm biến trỏ, tới địa hàm • Khi chương trình thực thi, chương trình đưa lên nhớ Do đó, mặt chất, hàm địa Con trỏ hàm #include int plus(int a, int b) { return a+b; } void main() { int a = 10, b=20; int ret = plus(a,b); printf("%d\n",ret); } Con trỏ hàm #include int plus(int a, int b) { return a+b; } void main() { int a = 10, b=20; int (*f)(int,int); f = + int ret = f(a,b); printf("%d\n",ret); } ... TongKet(2,2,1)); } Hàm inline • Hàm inline hàm mà trình biên dịch copy toàn đoạn code định nghĩa hàm vào nơi mà hàm gọi • Cú pháp: inline KDL Tên _Hàm( cácthamsố) { … } Hàm inline • Làm cho chương trình chạy...Nội dung • • • • • Tham số hàm main Hàm với tham số mặc định Các kiểu trả hàm Hàm inline Con trỏ hàm Tham số hàm main • Hàm main nhận vào tham số • Ví dụ: • int main(int... chi phí chuyển đổi thị lệnh gọi hàm kết thúc hàm • Giảm khơng gian nhớ hàm chiếm dụng gọi Hàm inline • Chỉ inline hàm nhỏ, inline hàm lớn gây phản tác dụng Bộ nhớ hàm inline chiếm giữ làm tăng