Hàm có đối con trỏ (tham chiếu)

Một phần của tài liệu giao trinh C(dttx) pot (Trang 55 - 57)

- Kết quả trả về của hàm là ký tự được ấn.

Các thành phần của hàm bao gồm:  Nguyên mẫu của hàm

4.1. Hàm có đối con trỏ (tham chiếu)

Nếu đối của hàm là con trỏ kiểu int (float,double,… ) thì tham số thực tương ứng phải là địa chỉ của biến kiểu int (float,double,…). Khi đó địa chỉ của biến được truyền cho đối con trỏ tương ứng. Do đã biết địa chỉ của biến, nên ta có thể gán cho nó một giá trị mới bằng cách sử dụng các câu lệnh thích hợp trong thân hàm.

Ví dụ minh họa

Chương trình hoán vị giá trị của hai biến

# include <stdio.h> #include <conio.h> int a,b;

void swap(int a, int b); main () /* Ham chinh */

{

clrscr();

a=3; b=7;

printf(“\n Truoc khi goi ham: ”) printf("A= %d ",a);

printf("B= %d ",b); swap(a,b);

printf("\nSau khi goi ham: A = %d B= %d \n",a,b); getch();

}

void swap(int a, int b) {

int temp ; temp=a; a=b;

a,b là hai tham số vừa vào vừa ra, nhưng khi khai báo không sử dụng kiểu con trỏ nên khi gọi thực hiện hàm này các biến mà ta truyền cho nó sẽ không thay đổi khi hàm kết thúc.

b=temp;

printf("\nTrong ham swap: A= %d B= %d ",a,b); }

Kết quả thu được:

Truoc khi goi ham: A=3 B=7

Trong ham swap: A= 7 B= 3 Sau khi goi ham: A = 3 B= 7

Như vậy hàm trên không đạt được yêu cầu đặt ra. Để giải quyết bài toán trên, ta viết lại chương trình như sau:

# include <stdio.h> #include <conio.h> int a,b;

void swap(int *a, int *b); main () /* Ham chinh */

{

clrscr(); a=3; b=7;

printf(“\n Truoc khi goi ham: ”) printf("A= %d ",a);

printf("B= %d ",b); swap(&a,&b);

printf("Sau khi goi ham: A = %d B= %d \n",a,b); getch();

}

void swap(int *a, int *b) {

int temp ; temp=*a; *a=*b; *b=temp;

printf("\nTrong ham swap A= %d B= %d \n",*a,*b); }

Kết quả thu được:

Truoc khi goi ham: A=3 B=7 Trong ham swap: A= 7 B= 3 Sau khi goi ham: A = 7 B= 3

Như vậy, kết quả hoàn toàn có thể chấp nhận được.

a,b là hai tham số vừa vào vừa ra, và sử dụng kiểu con trỏ

Khi tham số hình thức là con trỏ thì tham số thực phải là con trỏ (dạng địa chỉ)

Một phần của tài liệu giao trinh C(dttx) pot (Trang 55 - 57)