Khi tiêu đề cho biết, tôi luôn tự hỏi tại sao scanf
phải dùng toán tử address of
(&).Tại sao scanf phải lấy địa chỉ của nhà điều hành
Trả lời
Vì C chỉ có tham số "pass-by-value", vì vậy để chuyển một biến '' để đặt giá trị vào, bạn phải chuyển địa chỉ của nó (hoặc một con trỏ tới biến).
Vì cần địa chỉ để đặt giá trị mà nó đọc. Nếu bạn khai báo biến là con trỏ, số scanf
sẽ không cần &
.
Khi bạn nhập nội dung nào đó với thiết bị nhập chuẩn (thường là bàn phím), dữ liệu đi qua phải là stored
ở đâu đó. Bạn phải point
ở đâu đó trong bộ nhớ để dữ liệu có thể được lưu trữ ở đó. Để point
vị trí bộ nhớ, bạn cần address
vị trí đó. Vì vậy, bạn phải chuyển địa chỉ biến của mình bằng cách sử dụng toán tử &
với scanf()
.
Mọi người khác đã mô tả rõ ràng rằng sscanf cần đặt đầu ra ở đâu đó, nhưng tại sao không trả lại? Do đó, nó phải trả về nhiều thứ - nó có thể điền vào nhiều hơn một biến (được định dạng bởi định dạng) và nó trả về một int cho biết có bao nhiêu biến số đó được điền.
scanf không lấy "địa chỉ của toán tử (&) ". Phải mất một con trỏ . Thông thường, con trỏ đến biến đầu ra được nhận bằng cách sử dụng toán tử địa chỉ trong lệnh gọi scanf, ví dụ:
int i;
scanf("%i", &i);
printf("number is: %d\n", i);
Nhưng đó không phải là cách duy nhất để thực hiện. Sau đây là chỉ là hợp lệ:
int* iPtr = malloc(sizeof(int));
scanf("%i", iPtr);
printf("number is: %d\n", *iPtr);
Vậy là:
int i;
int iPtr = &i;
scanf("%i", iPtr);
printf("number is: %d\n", i);
như giá trị sẽ được lưu trữ, (ở đâu?), Trong địa chỉ bộ nhớ. do đó scanf() thỏa thuận với (&) nhà điều hành.
Cảm ơn người đàn ông vì điều này. –