01/10/2018, 00:14

Hỏi về tham chiếu,tham trị,biến toàn cục,biến cục bộ?

như tiêu đề,nọi người có thể cho em hỏi về khái niệm
về tham chiếu,tham trị,biến toàn cục,biến cục bộ được không ạ???
em có xem qua video anh đạt trên youtube mà vẫn thấy lơ mơ lắm:joy:
cho em xin thêm ví dụ minh họa với ạ,với cho em hỏi những kiểu trên thường áp dụng như thế nào trong lập trình thực tế với !!!

Trọng Nghĩa viết 02:24 ngày 01/10/2018

Xét hàm:

    int tong(int a, int &b)
    {
      a++;
      b++;
      return a + b;
    }

và gọi lệnh:

int x = 3, y = 3;
int tong = tong(x, y);

Sau khi thực hiện, kết quả lần lượt là:
x = 3, y = 4
tong = 8.

Thao tác:

  • Tăng a -> Không tăng x
  • Tăng b -> tăng y
  • Cộng a và b(không phải cộng x và y)
  • Tham trị: ở đây là a, khi bạn gọi hàm, chương trình sẽ tạo một biến a mới, với giá trị bằng giá trị tham số nhập vào(giá trị của x). Sau khi thực hiện xong hàm thì a bị xóa đi, giá trị của x không hề bị đụng đến nên ko thay đổi( vì mọi thao tác đều trên a). Kiểu như Tùng lấy nhạc của Chác-li, nhưng Tùng có sửa gì nó cũng không ảnh hưởng đến We don’t talk anymore của Chác-li vậy.
  • Tham chiếu: ở đây là b, b không được tạo mới mà được tham chiếu đến ô nhớ đang chứa tham số thứ hai là y, nghĩa là nó lấy thẻ ATM của y ra dung, xong hàm nó dung xong thì giá trị (thẻ) của y cũng bị đổi.
  • Biến toàn cục là biến được khai báo bên ngoài tất cả các hàm, nên bất kì hàm nào(nằm sau dòng khai báo biến này) trong chương trình đều dung đc biến ấy. Nói đơn giản là như 1 đứa con gái mới lớn, thằng nào cũng dung(tán) được.
  • Biến cục bộ là biến đc khai báo phía trong hàm, chỉ hàm đó đc dùng, các hàm khác ko đc đụng đến. Nói nôm na là cái con ở ví dụ trên nó có chồng cmnr, đụng vô chồng nó tang vỡ mồm.
Sơn viết 02:20 ngày 01/10/2018

Có 2 cách truyền đối số cho hàm, là tham trị và tham chiếu. VD mình có 1 biến, nếu truyền vào hàm bằng tham trị thì tham số của hàm sẽ cóp giá trị của biễn vừa rồi vào, Vì vậy, việc sửa đổi tham số vừa rồi không làm ảnh hưởng đến cái biến đó.

Còn nếu truyền bằng tham chiếu thì tham số của hàm sẽ có đc địa chỉ của biến bạn vừa chuyền vào, nên nếu bạn thay đổi giá trị tham số của hàm thì giá biến truyền vào sẽ bị thay đổi.

Biến cục bộ là biến chỉ nằm trong 1 scope, có thể nói nôm na là nằm trong 1 cặp dấu { và }. Khi ra khỏi scope đó thì biến đó sẽ bị hủy.

Biến toàn cục thì là biến có phạm vi nằm trong 1 file hoặc cả chương trình, tùy . Biến này sẽ bị hủy khi ct kết thúc.

Tien_tran_97 viết 02:16 ngày 01/10/2018

vị dụ sinh động ghê!
nhưng e vẫn hay lẫn lộn giữa việc sử dụng tham chiếu :

void nhap(int &n,int &k)
{
    do
    {
        cout<<"nhap 2 so nguyen duong lan luot n va k : ";
        cin>>n>>k;
        if(n<0||k<0)
            cout<<"nhap sai so! \n";
    }
    while(n<0||k<0);
}
int main()
{
    int n,k;
    nhap(n,k);
return 0;
}

chỗ này dùng tham chiếu có sai k ạ !!

chichi viết 02:20 ngày 01/10/2018

Dùng đúng nhé…

Tien_tran_97 viết 02:26 ngày 01/10/2018

tại em vẫn hay nhầm lẫn giữa tham chiếu với tham trị

Trọng Nghĩa viết 02:15 ngày 01/10/2018

Dùng tham chiếu có lợi hơn về tốc độ và tiết kiệm dung lượng vì thực chat nó không cần vùng nhớ mới. Nhưng nhược điểm là không an toàn vì đôi khi giá trị bị thay đổi một cách không mong muốn.
Để giải quyết cũng có cách, đó là khai báo tham chiếu dạng const:

int add(const int &a, const int &b);

Tuy nhiên chỉ giải quyết đc 1 số tr.hợp nhất định.

P/s: Xin lỗi nhé, mình dùng Microsoft Edge nên gõ Tiếng Việt không tốt lắm!

Tien_tran_97 viết 02:19 ngày 01/10/2018

khai báo tham chiếu dạng const

anh có thể nói kĩ hơn không ạ!!

Bài liên quan
0