30/09/2018, 19:16
Cho mình hỏi về con trỏ
void tg(int m, int n)
{
int i;
if (m > n) i = n;
else i = m;
for ( i = n; i >=2; i--)
{
if (m%i==0&&n%i==0)
{
m = m / i;
n = n / i;
}
}
printf("%d/%d",m,n);
}
đây là hàm in ra phân sô tối giản
khi thay đổi
int tg(int m, int n)
{
int i;
if (m > n) i = n;
else i = m;
for ( i = n; i >=2; i--)
{
if (m%i==0&&n%i==0)
{
m = m / i;
n = n / i;
}
}
return m;
}
mình muốn trả về giá trị m, tại sao nó không giữ nguyên giá trị m mà bị thay đổi.
mình nghĩ là dùng con trỏ để truyền tham số cho hàm thì m mới thay đổi chứ?
Bài liên quan
[quote=“NguyenDangHung1, post:1, topic:19137”]
m = m / i;
[/quote]Ở đây bạn thay đổi giá trị của m rồi nên tất nhiên khi return nó sẽ trả về giá trị mới.
Sao bạn không tìm UCLN để tối giản p/s
Bạn hiểu nhầm về cái truyền tham trị và con trỏ rồi.
Khi bạn truyền tham trị thì ra ngoài hàm giá trị nó sẽ ko đổi, còn truyền con trỏ thì giá trị của nó sẽ thay đổi, nhưng thay đổi là thay đổi ngoài hàm nhé. Chẳng hạn trọng chương trình của bạn bạn gọi
printf("%d", m)
trong hàm main thì giá trị của m sẽ không đổi,Nhưng cái bạn return lại bao nhiêu thì giá trị của biến mới sẽ bằng bấy nhiêu. Chẳng hạn
int a = tg(int m, int n)
thì a sẽ khác m vì nó nhận giá trị trong hàm, còn m là giá trị ngoài hàmbài này không phức tạp quá phải đưa con trỏ vào đâu bạn. Bạn tham khảo bài của mình xem:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n,i;
printf(“nhap tu: “);
scanf(”%d”,&n);
printf(“nhap mau: “);
scanf(”%d”,&m);
printf(“phan so ban dau la: %d/%d\n”, n, m);
}
Mình hiểu rồi. Mình cảm ơn!
Bài này dễ mình hỏi 1 chút về con trỏ thôi :)))