Trong bài học lập trình c cơ bản, hôm nay tôi sẽ tiếp tục giới thiệu đến cho các bạn con trỏ và hàm trong lập trình C, để hiểu được nội dung này các bạn nên tìm hiểu 2 vấn đề cần quan tâm nhất trước:
Trong lập trình C, cũng có thể truyền địa chỉ làm đối số cho các hàm.
Để chấp nhận các địa chỉ này trong định nghĩa hàm, chúng ta có thể sử dụng các con trỏ. Đó là vì con trỏ được sử dụng để lưu trữ địa chỉ. Hãy lấy một ví dụ:
Ví dụ: Gọi theo tham chiếu
Khi * n1 và * n2 được thay đổi bên trong hàm exchange (), num1 và num2 bên trong hàm main () cũng được thay đổi.
Bên trong hàm exchange (), * n1 và * n2 được tráo đổi. Do đó, num1 và num2 cũng được hoán đổi.
Lưu ý rằng, hoán đổi () không trả lại bất cứ thứ gì; loại trả về của nó là void.
Kỹ thuật này được gọi là cuộc gọi bằng cách tham chiếu trong lập trình C.
Địa chỉ của num1 và num2 được truyền cho hàm exchange () bằng cách sử dụng trao đổi (& num1, & num2);.
Con trỏ n1 và n2 chấp nhận các đối số này trong định nghĩa hàm.
#include <stdio.h>
Sau đó chúng ta đã chuyển con trỏ p đến hàm addOne (). Con trỏ ptr lấy địa chỉ này trong hàm addOne ().
Bên trong hàm, chúng tôi đã tăng giá trị được lưu trữ ở ptr lên 1 bằng cách sử dụng (* ptr) ++;. Vì các con trỏ ptr và p đều có cùng một địa chỉ, * p bên trong hàm main () cũng là 11.
Trong lập trình C, cũng có thể truyền địa chỉ làm đối số cho các hàm.
Để chấp nhận các địa chỉ này trong định nghĩa hàm, chúng ta có thể sử dụng các con trỏ. Đó là vì con trỏ được sử dụng để lưu trữ địa chỉ. Hãy lấy một ví dụ:
Ví dụ: Gọi theo tham chiếu
#include <stdio.h>Kết quả:
void swap(int *n1, int *n2);
int main()
{
int num1 = 5, num2 = 10;
// address of num1 and num2 is passed
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;
}
num1 = 10giải thích:
num2 = 5
Khi * n1 và * n2 được thay đổi bên trong hàm exchange (), num1 và num2 bên trong hàm main () cũng được thay đổi.
Bên trong hàm exchange (), * n1 và * n2 được tráo đổi. Do đó, num1 và num2 cũng được hoán đổi.
Lưu ý rằng, hoán đổi () không trả lại bất cứ thứ gì; loại trả về của nó là void.
Kỹ thuật này được gọi là cuộc gọi bằng cách tham chiếu trong lập trình C.
Địa chỉ của num1 và num2 được truyền cho hàm exchange () bằng cách sử dụng trao đổi (& num1, & num2);.
Con trỏ n1 và n2 chấp nhận các đối số này trong định nghĩa hàm.
void swap(int* n1, int* n2) {Ví dụ 2: Truyền con trỏ đến các hàm
... ..
}
#include <stdio.h>
Ở đây, giá trị được lưu trữ tại p, * p, là 10 ban đầu.
void addOne(int* ptr) {
(*ptr)++; // adding 1 to *ptr
}
int main()
{
int* p, i = 10;
p = &i;
addOne(p);
printf("%d", *p); // 11
return 0;
}
Sau đó chúng ta đã chuyển con trỏ p đến hàm addOne (). Con trỏ ptr lấy địa chỉ này trong hàm addOne ().
Bên trong hàm, chúng tôi đã tăng giá trị được lưu trữ ở ptr lên 1 bằng cách sử dụng (* ptr) ++;. Vì các con trỏ ptr và p đều có cùng một địa chỉ, * p bên trong hàm main () cũng là 11.
Post a Comment
Post a Comment