Trong bài này, chúng ta sẽ học cách chuyển địa chỉ và con trỏ làm tham số cho các hàm thông qua các ví dụ.
- Truyền địa chỉ đến hàm
- Truyền con trỏ đến hàm
Truyền địa chỉ vào hàm trong
Ví dụ:
cpp
#include <stdio.h>
void swap(int *n1, int *n2);
int main()
{
int num1 = 1, num2 = 2;
swap( &num1, &num2);
printf("num1 = %d\n", num1);
printf("num2 = %d", num2);
return 0;
}
void swap(int* n1, int* n2)
{
int temp;
temp = *n1;
*n1 = *n2;
*n2 = temp;
}
Kết quả
num1 = 2
num2 = 1
Địa chỉ của num1
và num2
được truyền vào hàm swap()
bằng cách sử dụng cú pháp:
cpp
swap( &num1, &num2);
Con trỏ n1 và n2 sẽ nhận hai tham số này trong khai báo hàm:
cpp
void swap(int *n1, int *n2);
Bên trong hàm swap()
, *n1
và *n2
hoán đổi. Kể từ đây,num1
và num2
cũng được hoán đổi. vì chúng ta đã truyền vào hàm địa chỉ của num1
chứ không phải là giá trị của num1
.
Lưu ý
swap()
không trả lại bất cứ điều gì; kiểu trả về của nó là void
.
Truyền con trỏ vào hàm trong C
Ví dụ:
cpp
#include <stdio.h>
void add(int* p1, int *p2) {
(*p1) += 2;
(*p2) += 3;
}
int main()
{
int* pa, a = 5;
int* pb, b = 6;
pa = &a;
pb = &b;
add(pa, pb);
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
Kết quả:
Kết quả
7
9
Trong chương trình này, con trỏ pa
nhận địa chỉ của biến a
, con trỏ pb
nhận giá trị của biến b
.
cpp
int* pa, a = 5;
int* pb, b = 6;
pa = &a;
pb = &b;
Hàm add()
trong chương trình đang thay đổi giá trị trực tiếp trên địa chỉ của con trỏ do chúng ta truyền con trỏ vào hàm.
Do đó sau khi hàm add()
được thực thi, lúc này giá trị của con trỏ pa
là 7
còn pb
là 9
, mà hai con trỏ này đang trỏ vào hai biến a
và b
nên hai biến này sẽ có giá trị lần lượt là 7
và 9
.