1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu tham khảo cơ bản về hàm trong c

35 324 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 35
Dung lượng 322,67 KB

Nội dung

Hoạt động của hàmcấp phát bộ nhớ cho các tham số và các biến cục bộ ■ ■ Gán giá trị của các đối số cho các tham số tương ứng Thực hiện các lệnh trong thân hàm■ ■ ■ W Khi gặp lệnh return

Trang 1

{ int dai, rong, dt;

printf(“\n Nhap chieu dai:”); scanf(“%d”, &dai); printf(“\n Nhap chieu rong:”); scanf(“%d”, &rong); dt= tich(dai,rong);

printf(“\n Dien tích: %d”, dt);

Trang 2

#include <stdio.h>

int tich(int X, int y ) ; II nguyên mẫu hàm (prototype)

void mainO

{ int dai, rong, dt;

printf(“\n Nhap chieu dai:”); scanf(“%d”, &dai); printf(“\n Nhap chieu rong:”); scanf(“%d”, &rong); dt= tich(dai,rong);// lời gọi hàm

printf(“\n Dien tich: %d”, dt);

}

int tich(int X, int y)// định nghĩa hàm

{ return (x*y);

}

Trang 3

Hoạt động của hàm

cấp phát bộ nhớ cho các tham số và các biến cục bộ ■ ■

Gán giá trị của các đối số cho các tham số tương ứng

Thực hiện các lệnh trong thân hàm■ ■ ■ W

Khi gặp lệnh return hoặc cuối thân hàm thì giải phóng vùng nhớ vừa cấp phát và thoát khỏi hàm

Trang 5

Truyền đối số theo giá trị

Hàm tạo ra một biến mới cùng kiểu với đối số và sao chép giá trị của đối số vào biến đó

Hàm không truy cập trực tiếp vào biến ban đẩu

mà chỉ tác động lên bản sao mà nó tạo ra

Sự thay đổi ở bản sao không tác động đến biến ban đẩu (biến gốc)

Hữu dụng khi hàm không có ý định thay đổi giá trị của biến gốc

Trang 6

1 #include <stdio.h> // truyền địa chỉ cho hàm

2 void hoanvi(int *px,int *py);

Trang 7

Phạm vi biến■

Biến toàn cục:■

- Được khai báo ở ngoài mọi hàm (kể cả hàm

main)

- Được sử dụng ở mọi nơi trong chương trình

Biến địa phương:

- ĐƯỢC khai báo trong hàm hoặc trong khối lệnh

- Chỉ được sử dụng trong thời gian gọi hàm đó hoặc trong thời gian thực hiện khối lệnh đó■ w ■ ■ ■

Trang 8

cấp phát bộ nhớ

Biến toàn cục được cấp phát tĩnh

Biến địa phương:

- cấp phát động: biến được giải phóng khi kết thúc hàm, không lưu kết quả cho lẩn sau

- Cấp phát tĩnh: biến không được giải phóng khi kết thúc hàm, lưu kết quả cho lần sau

- Mặc định biến địa phương là cấp phát động

Để Cấp phát tĩnh biến địa phương, ta dùng từ khoá static trước khai báo của biến

Trang 10

cấp phát bộ nhớ

Biến địa phương (tiếp theo)

- Biến địa phương thanh ghi:

• khai báo : register int x;

• yêu cáu trình biên dịch đặt biến đó vào thanh

ghi (nếu có thể)

• không dùng từ khóa register với biến tĩnh

• không định nghĩa con trỏ đến biến thanh ghi

Trang 12

printf("\nUSCLN=%d",uscln(x,y));

}

Trang 14

Mảng Một số lượng hữu hạn các phần tử cùng

Khai báo mảng: int a[3];

Khai báo và khởi tạo mảng: int a[3]={l,3,2} ; Khai báo xâu ký tự:

- char text[5]={‘a ,’b’,’c’,’d’,’\0’ };

- char text[5]=“abcd”;

Trang 15

5 for(i=0 ; i<n ; i++)

6 { printf( \nx[ó/od]=”, i);

7 scanf(“%d”, &mang[i]);

9 printf(“\n Mang gom cac phan tu :\n”);

10 for(i=0 ; i<n ; i++)

11 pri ntf(“\nx[%d]=%d”, i, mang [i]);

12 }

Trang 16

Mảng nhiều chiểu

Khai báo và khởi tạo mảng nhiều chiều

in tx[2 ][3 ]= { {1 ,2 ,3 },

{2 ,3 ,4 }

Trang 17

6 Con trỏ và mảng nhiều chiều

7 Truyền mảng nhiều chiều cho hàm

Trang 18

Khái niệm con trỏ■

Khi khai báo 1 biến, trình biên dịch sẽ cấp phát 1 ô nhớ với địa chỉ duy nhất cho biến đó

Con trỏ là biến dùng để chứa địa chỉ của biến khác

Con trỏ ptr chứa địa chỉ của biến b => con trỏ ptr đang trỏ đến biến b

Trang 19

Con trỏ và biến đơn

Khai báo con trỏ: int b, *ptr;

Khởi tạo con trỏ: ptr = &b;

Trang 21

Vi du kiem dinh gia tri con tro■ ■ ■

printf(“\nGia tri cua number: %d”,number);

printf(“\nDia chi cua number: %p”,&number);

printf(“\nGia tri cua con tro pointer: %p”,pointer);

printf(“\nGia tri duoc tro toi boi pointer: %d”,*pointer);printf(“\nDia chi cua con tro pointer: %p”,&pointer);

getchO;

}

Trang 23

1 #include <stdio.h> // hàm có nhiều giá trị đẩu ra

2 void ham(int X, int y, int *sum, int *product)

Trang 24

Con trỏ và mảng một chiểu

Các phần tử của mảng được cấp phát liên tiếp nhau, phần tử đầu tiên có địa chỉ

thap nhất.

Tên mảng là hằng con trỏ, luôn trỏ đến

phắn tử đầu tiên của mảng.

Số học con trỏ: phép tăng / giảm con trỏ làm cho con trỏ trỏ đến phần tử liền sau / liền trước của phần tử ban đầu

Trang 26

Truyền mảng một chiều cho hàm

int max( int x[ ], int n)

Trang 27

void nhap( int xQ)

void xuat(const int xO) // chú ý từ khoá const

Trang 28

Con trỏ và mảng nhiều chiều

Trang 29

• Các phẩn tử của mảng 2 chiều được sắp xếp: các phần tử của hàng đầu tiên, saũ đó đến các phần tử của hàng kế tiếp .

int*pa, a[4][6];

pa=(int *)a; // ép kiểu

Khi đó pa là địa chỉ của a[0][0]

pa + 1 là địa chỉ của a[0][l]

pa + 2 là địa chỉ của a[0][2]

Con trỏ và mảng nhiều chiều

pa + ¡*6 + j là địa chỉ của

Trang 30

6 printf(“\nNhap vao cac phan tu cua mang:”);

7 for (i=0 ; i<4 ; i++)

Trang 31

Truyền mảng nhiều chiều cho hàm

Giả sử ta cắn truyền mảng float a[4] [5] cho hàmCách 1: khai báo

float (*pa)[5]; hoặc float pa[][5];

Trong thân hàm, để truy cập phần tửa[i][j] ta dùng pa[i][j]

Cách 2: khai báo

float *pa; và int n; // số cột

Trong thân hàm, để truy cập phần tửa[i][j] ta dùng *(pa+i*n+j)

Trang 32

1 //chương trình nhập xuất mảng 2 chiều theo cách 1

2 #include <stdio.h>

3 void nhap(int a|][6],int m,int n)

4 { int i,j, x; // X là biến trung gian

6 printf("\nNhap vao cac phan tu cua mang:");

7 for ( i=0 ; i<m ; i++)

Trang 33

15 void hienthi(int a0[6],int mjnt n)

16 { int i,j;

17 printf("\nCac phan tu cua mang:\n");

18 for ( i=0 ; i<m ; i++)

Trang 34

1 // nhập xuất mảng 2 chiều theo cách 2

Trang 35

16 void hienthi(int *p, int m, int n)

17 { int i, j;

18 printf("\nCac phan tu cua mang:\n");

19 for ( i=0 ; i<m ; i++)

27 int *pa, a[10][N];

28 pa=(int *)a; // chú ý lệnh này

Ngày đăng: 18/11/2014, 21:07

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w