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 << "\n";
	system("pause");
}

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

1 Like
void doicho(int a, int b)

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:

void doicho(int& a, int& b)
1 Like

Cám ơn bạn nhé, để mình tìm hiểu kĩ chỗ này :smile:

void doicho(int a, int b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}

Cái hàm này là pass by value; nên khi gọi doicho(x, y); tức là truyền giá trị của x vào cho a, nhưng xa vẫn nằm ở 2 ô nhớ khác nhau trong bộ nhớ. Khi thay đổi giá trị của a trong thân hàm thì giá trị của x vẫn không đổi.

Muốn đổi chỗ xy 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.

1 Like

Gợi ý, đổi chổ 2 số đã có sẵn, bạn chỉ cần gọi swap(a,b) là xong…

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