01/10/2018, 11:43

Tham số truyền vào ham(int &a) và ham(int *a) khác nhau thế nào

Khi truyền vào 1 hàm
vd: ham(int &a) và ham(int *a) thì nó khác nhau thế nào mọi người,ý nghĩa của mỗi cách truyền là sao ạ

HK boy viết 13:47 ngày 01/10/2018

Sao bạn cứ hay quên đặt category cho topic của bạn thế nhỉ :v còn tái phạm là ăn nhé.

int &a --> tham biến a, là kiểu int
int *a --> xem cmt anh Đạt, mình không biết gì về nó hết.

Khác nhau về khái niệm Khai báo int (*a)[100] là cho biết a sẽ trỏ tới một mảng kiểu int, mảng này có 100 phần tử kiểu int. Khai báo int *a là để cho biết a sẽ trỏ tới địa chỉ int, địa chỉ đó có thể là mảng. Khai báo int *a[100] là cho biết a là mảng 100 phần tử, mỗi phần tử là một con trỏ kiểu int. Khác nhau về kích thước giữa int *a và int(*a)[100] Khai báo int (*a)[100] là để khai báo rõ ràng rằng a trỏ tới mảng kiểu int với kích thước mỗi phần tử là 400 bytes bởi vì 100 * 4 bytes = 4…
rogp10 viết 13:58 ngày 01/10/2018

Thớt xác định rõ ràng là đang học C hay C++. C không có tham chiếu đâu.

Vinh viết 13:54 ngày 01/10/2018

category

là gì ạ,em ko hiểu lắm

Vinh viết 13:54 ngày 01/10/2018

đang học c++ anh ơi

Vinh viết 13:46 ngày 01/10/2018

ý mình muốn hỏi là khi truyên vào hàm nó có ý nghĩa gì cơ ,chứ ko phải khai báo

rogp10 viết 13:50 ngày 01/10/2018

Lần sau: Đừng để daynhauhoc.com theo vết xe đổ của ddth.com

Category ngay chỗ ghi “Uncategorized” ấy.

明玉 viết 13:59 ngày 01/10/2018

int& a là tham chiếu.
int* a là con trỏ.

Tham chiếu thì là hàng xịn của C++, như tên, nó tham chiếu tới chỗ có dữ liệu thật sự.
Thao tác với nó bt, gán hoặc lấy dữ liệu, và nhờ nó ta truy cập gián tiếp tới dữ liệu thật sự (ở mức trừu tượng của C++ nhé, biên dịch rồi thì ko nói).

Con trỏ thì phải làm phép khử tham chiếu, như thế này: *a
Để đến được dữ liệu thật sự.

Truyền tham số kiểu này nôm na là truyền con đường dẫn đến dữ liệu, chứ không phải truyền bản sao của dữ liệu.

2 cái này nếu type đơn giản (như int) thì thường sẽ được biên dịch ra mã máy y hệt nhau.

Vinh viết 13:48 ngày 01/10/2018

và nhờ nó ta truy cập gián tiếp tới dữ liệu thật sự (ở mức trừu tượng của C++ nhé, biên dịch rồi thì ko nói).

Con trỏ thì phải làm phép khử tham chiếu, như thế này: *a
Để đến được dữ liệu thật sự.

chưa hiêu chỗ này a ơi

明玉 viết 13:59 ngày 01/10/2018

Trực tiếp:

int a = 0;
a = 2;

Gián tiếp bằng tham chiếu:

int a = 0;
int& b = a;
b = 2; //  a == 2

Gián tiếp bằng con trỏ:

int a = 0;
int* b = &a;
*b = 2; // a == 2
Vinh viết 13:55 ngày 01/10/2018

em đang hỏi truyên vào hàm anh ạ

Vinh viết 13:57 ngày 01/10/2018

truyên vào hàm nó có gi khác ko ạ ,hay ý ngĩa cũng giống như khai báo chỗ vd đó a

明玉 viết 13:50 ngày 01/10/2018

Truyền tham số vào hàm số thì nó cũng gần gần như vậy thôi.

Vinh viết 13:53 ngày 01/10/2018

thấy vd anh đưa ra về truyền tham chiếu nó chẳng có ý nghĩa gì to lắm ,thế truyên trưc tiêp cho nhanh

明玉 viết 13:47 ngày 01/10/2018

Sau này bạn truyền cả một class object vào là mệt đấy nhé. Phải học cách truyền gián tiếp.
Với lại bạn muốn thay đổi biến số nhưng code quá phức tạp, phải cắt ra hàm số riêng, thế thì phải truyền như & hoặc * để thay đổi nó.

HK boy viết 13:54 ngày 01/10/2018

thấy vd anh đưa ra về truyền tham chiếu nó chẳng có ý nghĩa gì to lắm

Ai bảo không có ý nghĩa gì.

int a[100];

void InputArray(int &n) { // không có &n thì bạn định làm gì?
    cin >> n;
    // code
    cout << n << endl;
}

int main() {
    int n;
    InputArray(n);
    cout << "Giá trị nhảm nhí của n là " << n << endl;
}

Sau này bạn truyền cả một class object vào là mệt đấy nhé. Phải học cách truyền gián tiếp.

Chuẩn. Dạo này code Python (không OOP), không thể truyền tham chiếu vào hàm được, code tù quá. Chắc sau mình phải chuyển code sang OOP.

nghia viết 13:47 ngày 01/10/2018

Chào vinhthang!
bạn chạy 3 hàm này rồi sẽ hiểu!
1.

void hoanvi1(int a, int b){
int tmp = a;
a = b;
b =tmp;
}
void hoanvi2(int &a, int &b){
int tmp = a;
a =b;
b =tmp;
}
void hoanvi3(int* a, int* b){
int tmp = *a;
*a = *b;
*b = tmp;
}
Vinh viết 13:54 ngày 01/10/2018

chao Nghĩa
có cần nhập giá trị a vs b ko ạ

rogp10 viết 13:56 ngày 01/10/2018

Cú pháp đơn giản này, không trỏ lung tung được này, …

Còn nếu truyền trực tiếp (tham trị) thì chắc chỉ có vác biến toàn cục đi muôn nơi.

nghia viết 13:45 ngày 01/10/2018

Chào vinhthang!
Mong bạn đọc kỹ các dòng code trên và phân tích đầu vào và đầu ra! Cảm ơn bạn!

Bài liên quan
0