Cấu trúc trong C

cho e hỏi là sao dòng void Nhap lại có &d còn dòng void Xuat lại k cần ạ. E thử trong Dev C thì để &d không chạy được ạ. E xin cảm ơn

#include<stdio.h>
#include<conio.h>
typedef struct DIEM{
  int x;
  int y;
}DIEM;
void Nhap(DIEM &d){
  printf("\nNhap toa do diem\n");
  printf("Hoanh do: ");scanf("%d",&d.x);
  printf("Tung do: ");scanf("%d",&d.y);}
void Xuat(DIEM d){
	printf("\nToa do diem: (%d,%d)",d.x,d.y);
}
DIEM Tong(DIEM d1,DIEM d2){
	DIEM temp;
	temp.x=d1.x+d2.x;
	temp.y=d1.y+d2.y;
	return temp;
}
int main(){
	DIEM A,B,AB;
	Nhap(A);Xuat(A);
	Nhap(B);Xuat(B);
	AB=Tong(A,B);
	printf("\nTong: ");
	Xuat(AB);
	return 0;
}

Hi,
Bạn dùng c hay c++ thế.
Trình biên dịch của bạn báo lỗi gì.
Mình nhớ không nhầm thì C không hỗ trợ reference như C++. Nếu không chạy được thì bạn thử chuyển qua dùng pointer xem nhé.
Lí do tại sao d và &d thì bạn đọc thêm về phạm vi sử dụng của biến nhé. Và sự khác nhau giữa 2 hàm, 1 cái là thay đổi giá trị, còn 1 cái chỉ xuất giá trị ra. Có thể xem ví dụ qua hàm swap

2 Likes

e dùng C ạ.

Bởi vì C không hỗ trợ reference kiểu này bạn nhé, C++ thì có hỗ trợ. Nhiều bạn hay bị nhầm chỗ này. Bạn nên chuyển qua sử dụng con trỏ, qua toán tử *.
Ở main thì bạn truyền vào con trỏ hoặc địa chỉ của biến là được.
À, mình góp í thêm cho lần sau :)) đầu tiên bạn đọc lỗi xem nó nói gì, nếu không hiểu thì paste vào google. Đây là cách mình hay dùng, vì nó chủ động, không phải đợi.

5 Likes

Khi xuất thì không cần thay đổi tham số (nên truyền tham trị là được). Nhưng khi nhập thì phải sửa tham số, nếu đúng là C thì phải dùng DIEM*, cách truyền tương tự scanf.

3 Likes

vâng e cảm ơn. Tại e thấy trong giáo trình viết như thế mà chạy k đc nên thấy lạ ạ.

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