2010-10-08 9 views

Trả lời

22

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).

+0

Cảm ơn người đàn ông vì điều này. –

5

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 &.

1

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().

1

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.

9

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); 
1

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.