Tham chiếu và tham trị trong C++?

chào mọi người ! Mọi người giúp em với ạ,

#include<iostream>  
using namespace std;
 
void swap(int *x, int *y) // <---------------- chỗ này thì khai báo biến con trỏ
{  
    int swap;  
    swap=*x;  
    *x=*y;  
    *y=swap;  
}  
 
int main()   
{    
    int x;
    int y;
    x=2;
    y=3;
    cout << "Gia tri x truoc khi goi ham, x = " << x << endl;
    cout << "Gia tri y truoc khi goi ham, y = " << y << endl;
    swap(&x, &y);  // <-------------------- Tại sao ở đây lại truyền vào là địa chỉ "&"
// mà ko phải truyền vào giá trị con trỏ như ở trên "*";
    cout << "Gia tri x sau khi goi ham, x = " << x << endl;
    cout << "Gia tri y sau khi goi ham, y = " << y << endl; 
    return 0;  
}

Đúng rồi bạn ei :smiley: con trỏ lưu địa chỉ mà.

3 Likes

con trỏ lưu giá trị mà nó trỏ đến mà???

Đó chính là địa chỉ.

2 Likes

Thế int *p=&p à bạn???

Bạn truyền vào 1 địa chỉ int* x = &p. Muốn lấy giá trị ở chỗ địa chỉ đó, bạn phải gọi *x, tức là *&p = p.

2 Likes

thế nghĩa là (*x)là con trỏ còn (int* x ) là gọi đến địa chỉ chứ không tồn tại (int *x) phải không bạn???

Không phải, con trỏ x lưu địa chỉ mà nó trỏ đến.

Ở đây có hai cái x và hai cái y.

Đây gọi là tham số hình thức. Lời gọi hàm thay &x ở ngoài vào tham số hình thức x.

4 Likes

Cho thực tế 1 cái nhá:
Giả sử:

  • * có nghĩa là: mảnh đất/ngôi nhà tại địa chỉ.
  • & có nghĩa là: lấy địa chỉ của mảnh đất/ngôi nhà.

Khi bạn có 1 “ngôi nhà”:

int x = 12345;

Mà cái thằng giao hàng nó chỉ cần địa chỉ:

void giaoHang(int *diaChi){
    // Nó giao cái gì đấy vào "ngôi nhà tại địa chỉ" diaChi.
}

Lúc thế bạn đưa cho nó cái hình ngôi nhà hay là địa chỉ?

Hình ngôi nhà của bạn:

// Lấy hình ngôi nhà của bạn gửi cho thằng giao hàng.
giaoHang(x);

Thằng giao hàng chạy khắp TP HCM mà chẳng biết ngôi nhà nào là CHÍNH XÁC của bạn, nó quăng đại vào ngôi nhà nó cảm thấy giống nhất. Đây là C/C++, thằng giao hàng của C/C++ nó tùy tiện vậy.
Bạn ở Bình Dương.

Địa chỉ ngôi nhà của bạn:

// "Lấy địa chỉ của ngôi nhà" và đưa địa chỉ đó cho thằng giao hàng.
giaoHang(&x);

Nó chạy đến đúng địa chỉ đó và quăng hàng vào 1 ngôi nhà. Đúng là nhà của bạn.

Trình tự:

int x = 12345; // "Ngôi nhà"
giaoHang(&x); // "Lấy địa chỉ ngôi nhà" đưa cho thằng giao hàng.

void giaoHang(int *diaChi){
    // Thằng giao hàng đến "ngôi nhà tại địa chỉ" và giao.
}

Nếu thời xưa là “bác đưa thư” chứ không phải “thằng giao hàng”. :rofl:

Ngôi nhà tại địa chỉ của ngôi nhà bố tôi => Nhà bố tôi chứ đâu. :smiling_imp:

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?