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.

Bài tập c về tham chiếu và tham trị năm 2024

Hãy xem các ví dụ sau để hiểu rõ về truyền tham chiếu và truyền giá trị trong C.


include

void change(int num) {

num = num + 1;
} int main() {
int x = 100;
printf("Truoc khi goi phuong thuc x = %d \n", x);
change(x); // truyen tham tri vao phuong thuc
printf("Sau khi goi phuong thuc x = %d \n", x);
return 0;
}

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.

  • Information
  • AI Chat

Was this document helpful?

Was this document helpful?

Bài tập c về tham chiếu và tham trị năm 2024

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.

include

void 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);

  • Home
  • My Library
  • Ask AI

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++)

  Console.WriteLine(message);
}

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) {

 int x = 1;
 Console.WriteLine("Before the call, x is " + x);
 Increment(x);
} public static void Increment(int n) {
 n++;
 Console.WriteLine("n inside the method is " + 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) {

 int num1 = 1;
 int num2 = 2;
 Console.WriteLine("Before invoking the swap method, num1 is " + num1 + " and num2 is " + num2);
 // Invoke the swap method to attempt to swap two variable
 Swap(num1, num2);
 Console.WriteLine("Affter invoking the swap method, num1 is " + num1+" and num2 is "+num2);
} public static void Swap(int n1, int n2) {
 Console.WriteLine("\t Inside the swap method");
 Console.WriteLine("\t\tBefore swapping, n1 is " + n1 + " and n2 is" + n2);
 int temp = n1;
 n1 = n2;
 n2 = temp;
 Console.WriteLine("\t\tAfter swapping, n1 is " + n1 + " and n2 is " + n2);
 Console.ReadLine();
}

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.