30/09/2018, 19:18
Sao hàm của mình ko sử dụng được thế này (c++)
Mình viết chương trình này bằng C++ trên vitual studio mọi người cho mình hỏi sao hàm đổi chỗ của mình nó không hoạt động với, kết quả chương trình c vẫn bằng 8 ???
#include <iostream>
using namespace std;
void doicho(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void main()
{
int x, y ;
x = 8;
y = 10;
doicho(x, y);
cout << "x=" << x << "
";
system("pause");
}
Bài liên quan
Bạn này chưa học về truyền giá trị cho hàm rồi, trong c, c++ có 3 loại truyền tham số là truyền tham trị, truyền tham chiếu và truyền con trỏ, cái này bạn lên mạng tìm là đầy đủ hết.
Còn cái bạn dùng là truyền tham trị, nghĩa là khi gọi hàm thì chương trình sẽ tạo ra biến mới và copy giá trị của biến cũ vào biến mới để sử dụng, như vậy hàm sử dụng biến mới chứ không phải biến cũ của bạn nên khi thoát hàm thì giá trị của biến không đổi
viết như vậy thì mặc định C++ hiểu a, b là bản copy của x, y khi gọi doicho(x, y). Để đổi chỗ x và y thì phải truyền bản chính:
Cám ơn bạn nhé, để mình tìm hiểu kĩ chỗ này
Cái hàm này là
pass by value
; nên khi gọidoicho(x, y);
tức là truyềngiá trị của x
vào choa
, nhưngx
vàa
vẫn nằm ở 2 ô nhớ khác nhau trong bộ nhớ. Khi thay đổi giá trị củaa
trong thân hàm thì giá trị củax
vẫn không đổi.Muốn đổi chỗ
x
vày
thì phải chỉ đích danh ô nhớ của 2 biến này ra, bằng cách sử dụng tham chiếu hay con trỏ, như thế gọi làpass by reference
.Gợi ý, đổi chổ 2 số đã có sẵn, bạn chỉ cần gọi
swap(a,b)
là xong…