Bài tập c về tham chiếu và tham trị năm 2024
Một điều khá quan trọng trong C đó là truyền tham chiếu và tham trị vào một phương thức (Function). Truyền tham chiếu là truyền địa chỉ ô nhớ của biến, do đó khi thay đổi giá trị của biến bên trong phương thức thì giá trị của biến cũng bị thay đổi bên ngoài phương thức. Truyền tham trị là truyền giá trị của biến (không phải là địa chỉ ô nhớ), khi đó phương thức sẽ tự động tạo ra một địa chỉ ô nhớ mới để lưu trữ giá trị này, do đó nó chỉ được thay đổi trong phương thức hiện hành và giá trị của biến không bị thay đổi bên ngoài phương thức hiện hành. Hãy xem các ví dụ sau để hiểu rõ về truyền tham chiếu và truyền giá trị trong C.
includevoid change(int num) { }
int main() { }Kết quả: Truoc khi goi phuong thuc x = 100 Sau khi goi phuong thuc x = 100 Trong ví dụ trên, giá trị của biến x không bị thay đổi bên ngoài phương thức change(), mặc dù bên trong phương thức change() chúng ta đã cố gắng thay đổi bằng cách tăng m lên 1.
Was this document helpful? Was this document helpful? Tham chiếếu và tham trị trong C Đây là 2 cách truyền tham số vào hàm khác nhau. Do đó, tùy mục đích mà chúng ta sẽ truyền tham số bằng tham trị hoặc tham chiếu. Tham trị là gì? Chúng ta vẫn thường dùng hàm trong hầu hết các bài học trước và truyền tham số theo cách truyền theo tham trị. Ví dụ: int f(int x){}. Khi một biến a được truyền vào lời gọi hàm f(int x) làm tham số dưới dạng tham trị, thì biến x của hàm f(int x) và biến a là hai biến độc lập. Bởi vì khi tham số của hàm f(int x) là tham trị, hàm này sẽ tạo ra một biến mới và sao chép giá trị của a vào. Do đó, nếu hàm mà thay đổi giá trị của x trong hàm f(int x) này thì không tác động gì tới giá trị của biến a. includevoid swap(int a,int b ) { int temp=a; a=b; b=temp; } int main() { int a,b; int x,y; scanf("%d",&x); scanf("%d",&y);
Tham trị có nghĩa là truyền giá trị của biến. Mọi xử lí tính toán trong phương thức khi kết thúc thì không làm thay đổi giá trị của biến tham số truyền vào Các đối số được truyền bằng giá trị cho các tham số khi phương thức được gọi Sức mạnh của một phương thức là khả năng làm việc với các tham số. Bạn có thể sử dụng WriteLine để in bất kỳ chuỗi nào. Khi gọi một phương thức, bạn cần phải cung cấp các đối số, nó phải được cung cấp theo thứ tự như các tham số tương ứng trong method signature. Đây được gọi là sự kết hợp các tham số (parameter order association). Ví dụ, phương thức sau in một thông báo n lần: public static void Println(String message, int n) { for (int i = 0; i < n; i++) }Bạn có thể sử dụng Println(“Hello”, 3) để in chuỗi Hello 3 lần. Lệnh Println(“Hello”, 3) truyền giá trị trong tham số chuỗi thực là Hello tới tham số message, truyền 3 cho n và in ra Hello 3 lần. Tuy nhiên, lệnh Println(3, “Hello”) bị sai. Kiểu dữ liệu của 3 không khớp với kiểu dữ liệu của tham số đầu tiền là một chuỗi (message), Hello không khớp với tham số thứ 2 là một số nguyên (n) Lưu ý: Các đối số phải khớp với các tham số theo thứ tự, số và kiểu tương thích, như đã định nghĩa trong method signature. Kiểu tương thích có nghĩa là bạn có thể truyền một đối số cho một tham số mà không ép kiểu tường minh, chẳng hạn như truyền một đối số giá trị int tới một tham số giá trị số thực (double) Khi bạn gọi một phương thức với một đối số, giá trị của đối số được truyền tới tham số. Đây được gọi là truyền tham trị (pass-by-value). Nếu đối số là một biến thay vì một hằng giá trị, giá trị của biến được truyền tới tham số. Biến không bị ảnh hưởng, bất kể những thay đổi được thực hiện cho tham số bên trong phương thức. Quan sát đoạn mã sau đây, giá trị của x được truyền cho tham số n để gọi phương thức Increment. Tham số n được tăng lên 1 trong phương thức Increment, nhưng x không bị thay đổi. public static void Main(string[] args) { }
public static void Increment(int n)
{ }Đoạn mã sau đây đưa ra một chương trình khác chứng tỏ sự ảnh hưởng của việc truyền bằng giá trị. Chương trình tạo ra một phương thức để đổi chỗ giá trị của hai biến. Phương thức Swap được gọi bằng cách truyền cho nó 2 đối số. Thật thú vị, các giá trị của các đối số không bị thay đổi sau khi phương thức được gọi. public static void Main(string[] args) { }
public static void Swap(int n1, int n2)
{ }Trước khi phương thức Swap được gọi , a là 1 và b là 2. Sau khi phương thức Swap được gọi, a là 2 và b là 1. Các giá trị của chúng được hoán đổi. |