Lập trình C. Kĩ thuật trên hàm

Chia sẻ bởi Huỳnh Bảo Long | Ngày 29/04/2019 | 71

Chia sẻ tài liệu: Lập trình C. Kĩ thuật trên hàm thuộc Bài giảng khác

Nội dung tài liệu:

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 tham số.
Ví dụ:
int main(int argc, char* argv[])
{
printf(“Hello world!”);
return 0;
}
Argc : số tham số
char* argv[] : mảng các tham số hàm main
Tham số hàm main
Ví dụ:
Khi chương trình .exe thực thi, các tham số như 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 là hàm có một hay nhiều tham số được gán giá trị.
Giá trị này sẽ trở thành giá trị mặc định nếu như các lời gọi hàm không có tham số này.
Các tham số mặc định phải nằm cuối cùng trong danh sách các hàm số của 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 ", TongKet(2,5));
printf("Tran Hoang B : %d ", TongKet(2,2));
printf("Le Van C : %d ", TongKet(3,5,1));
printf("Vu Thi D : %d ", TongKet(2,2,1));
}
Hàm inline
Hàm inline là hàm mà trình biên dịch sẽ copy toàn bộ đoạn code trong định nghĩa hàm vào nơi mà hàm được 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 hơn do không phải tốn chi phí chuyển đổi chỉ thị lệnh mỗi khi gọi hàm và kết thúc hàm.
Giảm không gian bộ nhớ do các hàm con chiếm dụng khi được gọi
Hàm inline
Chỉ inline những hàm nhỏ, nếu inline cả những hàm lớn sẽ gây phản tác dụng. Bộ nhớ do hàm inline chiếm giữ có thể làm tăng vùng nhớ chiếm của đoạn code đang thực thi.
Hàm inline
inline int min (int x, int y)
{
if (x < y)
return x;
else
return y;
}
int main(void)
{
int x=1,y=9;
printf("%d ",min(x,y));
}
Hàm trả về con trỏ
Hàm có thể nhận kết quả trả về là một con trỏ.
Nhu cầu nhận con trỏ trả về
Nhận con trỏ tới một vùng nhớ nào đó.
Nhận về một mảng dữ liệu.
Thực hiện thao tác nào đó trên mảng, kết quả cần con trỏ tại một vị trí nào đó trên mảng.
Xem phần trả về con trỏ trong bài Con trỏ

Hàm trả về con trỏ
Ví dụ: return_pointer.cpp

Hàm trả về tham chiếu
C++ cho phép hàm trả về tham chiếu đến một biến khác.
Dễ dàng hơn cho việc trả về một vùng nhớ lớn.


Hàm trả về tham chiếu
Ví dụ
#include
int x;
int& setx()
{
return x;
}
int main(void)
{
setx() = 10;
printf("x= %d ",x);
}



Hàm với tham số là hằng
Hàm có tham số là hằng, tức là tham số đó không thể thay đổi trong hàm.

void func(const int i)
{
i++; // lỗi biên dịch tại đây
}
Hàm với giá trị trả về là hằng
Giá trị trả về của hàm là hằng, tức ta không thể thay đổi giá trị trả về sau khi 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 ",);
//*test() = 1; // lỗi
}
Hàm với giá trị trả về là hằng
Hàm trả về là hằng không có giá trị với các kiểu dữ liệu cơ sở.
#include
const int test() { return 1; }
int main() {
int k = test();
k = 10;
printf("%d ",k);
}

Con trỏ hàm
Con trỏ hàm là một biến con trỏ, chỉ tới địa chỉ của một hàm.
Khi chương trình thực thi, chương trình đó sẽ được đưa lên bộ nhớ chính. Do đó, về mặt bản chất, hàm cũng chỉ là địa chỉ
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 ",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 ",ret);
}
Bài tập
Cho biểu thức a ** b. Dựa vào lựa chọn của người dùng mà thay ** thành +,-,*,/. Sử dụng con trỏ hàm.
Chuyển các bài tập đã làm trước đây sang cách dùng con trỏ hàm
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Huỳnh Bảo Long
Dung lượng: | Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)