Mô tả

Có hai cách truyền tham số cho hàm: Tham  trị và Tham chiếu (biến) :

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.

Truyền theo tham trị

Truyền theo tham trị, giá trị được truyền cho hàm được lưu trữ cục bộ bởi tham số của hàm trong vị trí ngăn xếp của bộ nhớ.

Chúng ta tìm hiểu ví dụ truyền tham  trị:

#include <stdio.h>

void thaydoi(int num)
{
    num= num+1;
}

int main()
{
    int x=100;
    printf("Truoc khi goi phuong thuc x = %d\n",x);
    thaydoi(x);
    printf("Sau khi goi phuong thuc x = %d\n",x);
    return 0;
}

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.

Truyền theo tham chiếu

Truyền theo tham chiếu giá trị ban đầu của biến bị thay đổi.

Lưu ý: để hiểu về truyền tham chiếu trong C, bạn phải có hiểu biết về con trỏ (pointer) trong C.

Chúng ta tìm hiểu ví dụ truyền tham chiếu:

Cách 1:

#include <stdio.h>

void thaydoi(int *num)
{
    *num = *num+1;
}

int main()
{
    int x=100;
    printf("Truoc khi goi phuong thuc x = %d \n",x);
    thaydoi(&x);
    printf("Sau khi goi phuong thuc x = %d \n",x);
    return 0;
}

Cách 2:

#include <stdio.h>

void thaydoi(int &num)
{
    num = num+1;
}

int main()
{
    int x=100;
    printf("Truoc khi goi phuong thuc x = %d \n",x);
    thaydoi(x);
    printf("Sau khi goi phuong thuc x = %d \n",x);
    return 0;
}

Trong ví dụ trên, cách 1 chúng ta thêm *x trong hàm change, còn cách 2 chúng ta thêm &x. Giá trị của biến x bị thay đổi cả bên trong và bên ngoài phương thức change()

Đăng nhập
Đăng ký
Hotline: 0904251826
x