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");
}
Vu Van Chung viết 21:18 ngày 30/09/2018

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 21:21 ngày 30/09/2018
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)
Trần Quốc Việt viết 21:24 ngày 30/09/2018

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

void viết 21:34 ngày 30/09/2018
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.

hacked viết 21:29 ngày 30/09/2018

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

Bài liên quan
0